using System;
using SharpChess;

namespace SharpChess
{
	public class Piece: IPieceTop
	{
		public enum enmName
		{
					Pawn
				,	Bishop
				,	Knight
				,	Rook
				,	Queen
				,	King
		}

		public enum enmID
		{
				WhiteQueensRook
			,	WhiteQueensKnight
			,	WhiteQueensBishop
			,	WhiteQueen
			,	WhiteKing
			,	WhiteKingsBishop
			,	WhiteKingsKnight
			,	WhiteKingsRook
			,	WhitePawn1
			,	WhitePawn2
			,	WhitePawn3
			,	WhitePawn4
			,	WhitePawn5
			,	WhitePawn6
			,	WhitePawn7
			,	WhitePawn8
			,	BlackQueensRook
			,	BlackQueensKnight
			,	BlackQueensBishop
			,	BlackQueen
			,	BlackKing
			,	BlackKingsBishop
			,	BlackKingsKnight
			,	BlackKingsRook
			,	BlackPawn1
			,	BlackPawn2
			,	BlackPawn3
			,	BlackPawn4
			,	BlackPawn5
			,	BlackPawn6
			,	BlackPawn7
			,	BlackPawn8
		}

		private IPieceTop m_Top;
		private Square m_square;
		private Square m_squareStartLocation;
		private Player m_player;
		private int m_LastMoveTurnNo = -1;
		private int m_NoOfMoves = 0;
		private bool m_HasBeenPromoted = false;
		private bool m_IsInPlay = true;
		private int m_Points = 0;
		private enmID m_ID;

		public Piece Base
		{
			get { return this; }
		}

		public IPieceTop Top
		{
			get { return m_Top; }
		}

		public Square StartLocation
		{
			get { return m_squareStartLocation; }
		}

		public Piece(Piece.enmName name, Player player, int Col, int Row, enmID ID)
		{
			Square square = Board.GetSquare(Col, Row);

			this.m_player = player;
			this.m_squareStartLocation = this.m_square = square;
			square.Piece = this;
			this.m_ID = ID;

			switch (name)
			{
				case Piece.enmName.Pawn:
					m_Top = new PiecePawn(this);
					break;
				
				case Piece.enmName.Bishop:
					m_Top = new PieceBishop(this);
					break;
				
				case Piece.enmName.Knight:
					m_Top = new PieceKnight(this);
					break;
				
				case Piece.enmName.Rook:
					m_Top = new PieceRook(this);
					break;
				
				case Piece.enmName.Queen:
					m_Top = new PieceQueen(this);
					break;

				case Piece.enmName.King:
					m_Top = new PieceKing(this);
					break;
			}
		}

		public ulong HashCodeAForSquareOrdinal(int Ordinal)
		{
			uint a = (uint)(m_ID);
			uint x = (((uint)(m_ID))<<7);
			ulong ulongPromotionModifier = 0;
			if (m_HasBeenPromoted)
			{
				switch (this.m_Top.Name)
				{
					case Piece.enmName.Queen:
						ulongPromotionModifier = 830859827498573475;
						break;
					case Piece.enmName.Rook:
						ulongPromotionModifier = 37500384876452947;
						break;
					case Piece.enmName.Bishop:
						ulongPromotionModifier = 448573857309865743;
						break;
					case Piece.enmName.Knight:
						ulongPromotionModifier = 294375032850265937;
						break;
				}
			}
			return m_aulongHashCodesA[(((uint)(m_ID))<<7) + Ordinal] + ulongPromotionModifier;
		}

		public ulong HashCodeBForSquareOrdinal(int Ordinal)
		{
			uint a = (uint)(m_ID);
			uint x = (((uint)(m_ID))<<7);
			ulong ulongPromotionModifier = 0;
			if (m_HasBeenPromoted)
			{
				switch (this.m_Top.Name)
				{
					case Piece.enmName.Queen:
						ulongPromotionModifier = 790423450762398573;
						break;
					case Piece.enmName.Rook:
						ulongPromotionModifier = 394756026094872034;
						break;
					case Piece.enmName.Bishop:
						ulongPromotionModifier = 629385632983478593;
						break;
					case Piece.enmName.Knight:
						ulongPromotionModifier = 283469276067858673;
						break;
				}
			}
			return m_aulongHashCodesB[(((uint)(m_ID))<<7) + Ordinal] + ulongPromotionModifier;
		}

		public ulong HashCodeA
		{
			get { return HashCodeAForSquareOrdinal(this.m_square.Ordinal); }
		}

		public ulong HashCodeB
		{
			get { return HashCodeBForSquareOrdinal(this.m_square.Ordinal); }
		}

		public string Abbreviation
		{
			get { return m_Top.Abbreviation; }
		}
	
		public enmName Name
		{
			get { return m_Top.Name; }
		}
	
		public int LastMoveTurnNo
		{
			get { return m_LastMoveTurnNo; }
			set { m_LastMoveTurnNo = value; }
		}

		public int ImageIndex
		{
			get { return m_Top.ImageIndex; }
		}
	
		public bool HasMoved
		{
			get { return m_NoOfMoves!=0 || !this.IsInPlay; }
		}

		public bool HasBeenPromoted
		{
			get { return m_HasBeenPromoted; }
			set { m_HasBeenPromoted = value; }
		}

		public bool IsInPlay
		{
			get { return m_IsInPlay; }
			set { m_IsInPlay = value; }
		}

		public int NoOfMoves
		{
			get { return m_NoOfMoves; }
			set { m_NoOfMoves = value; }
		}

		public bool MovedLastMove
		{
			get {return m_LastMoveTurnNo == Game.TurnNo-2;}
		}

		public Square Square
		{
			get { return m_square; }
			set { m_square = value; }
		}
	
		public Player Player
		{
			get { return m_player; }
		}
	
		public int BasicValue
		{
			get { return m_Top.BasicValue;	}
		}

		public int Value
		{
			get { return m_Top.Value; }
		}

		public int Points
		{
			get {return m_Points;}
			set {m_Points = value;}
		}

		public bool IsCapturable
		{
			get { return m_Top.IsCapturable; }
		}

		public void GenerateLegalMoves(Moves moves)
		{
			GenerateLazyMoves(moves, Moves.enmMovesType.All);
			Move move;
			for(int intIndex=moves.Count-1; intIndex>=0; intIndex--)
			{
				move = moves[intIndex];
				Move moveUndo = move.Piece.Move(move.Name, move.To);
				if (move.Piece.Player.IsInCheck)
				{
					moves.Remove(move);
				}
				SharpChess.Move.Undo(moveUndo);
			}
		}
			
		public void GenerateLazyMoves(Moves moves, Moves.enmMovesType movesType)
		{
			m_Top.GenerateLazyMoves(moves, movesType);
		}
			
		public void Promote(Piece.enmName name)
		{
			if (m_HasBeenPromoted)
			{
				throw new ApplicationException("Piece has already been promoted!");
			}

			if (this.Name != Piece.enmName.Pawn) 
			{
				throw new ApplicationException("Attempt to promote piece that is not a pawn");
			}

			switch (name)
			{
				case Piece.enmName.Bishop:
					m_Top = new PieceBishop(this);
					break;
				
				case Piece.enmName.Knight:
					m_Top = new PieceKnight(this);
					break;
				
				case Piece.enmName.Rook:
					m_Top = new PieceRook(this);
					break;
				
				case Piece.enmName.Queen:
					m_Top = new PieceQueen(this);
					break;

				default:
					throw new ApplicationException("Can only promote pawn to either Bishop, Knight, Rook or Queen");
			}
			this.m_player.DecreasePawnCount();
			this.m_player.IncreaseMaterialCount();
			m_HasBeenPromoted = true;
		}

		public void Demote()
		{
			if (!m_HasBeenPromoted)
			{
				throw new ApplicationException("Cannot demote piece that hasnt been promoted");
			}
			m_Top = new PiecePawn(this);
			this.m_player.IncreasePawnCount();
			this.m_player.DecreaseMaterialCount();
			m_HasBeenPromoted = false;
		}

		public Move Move(Move.enmName MoveName, Square square)
		{
			Square squarepieceCaptured = square;

			if (MoveName==SharpChess.Move.enmName.EnPassent) // Override when en passent
			{
				squarepieceCaptured = Board.GetSquare( square.Ordinal - this.m_player.PawnForwardOffset );
			}

			Board.HashCodeA ^= this.HashCodeA; // Un-XOR current piece position
			Board.HashCodeB ^= this.HashCodeB; // Un-XOR current piece position
			if (this.Name==Piece.enmName.Pawn)
			{
				Board.PawnHashCodeA ^= this.HashCodeA;
				Board.PawnHashCodeB ^= this.HashCodeB;
			}

			Move move = new Move(Game.TurnNo, this.m_LastMoveTurnNo, MoveName, this, this.m_square, square, squarepieceCaptured.Piece, squarepieceCaptured.Piece==null ? -1 : squarepieceCaptured.Piece.Player.Pieces.IndexOf(squarepieceCaptured.Piece), 0);

			if (square.Piece != null)
			{
				Board.HashCodeA ^= squarepieceCaptured.Piece.HashCodeA; // un-XOR the piece taken
				Board.HashCodeB ^= squarepieceCaptured.Piece.HashCodeB; // un-XOR the piece taken
				if (squarepieceCaptured.Piece.Name==Piece.enmName.Pawn)
				{
					Board.PawnHashCodeA ^= squarepieceCaptured.Piece.HashCodeA;
					Board.PawnHashCodeB ^= squarepieceCaptured.Piece.HashCodeB;
				}
				squarepieceCaptured.Piece.Capture();
			}

			Game.TurnNo++;

			this.m_square.Piece = null;
			square.Piece = this;
			this.m_square = square;
			
			this.m_LastMoveTurnNo = Game.TurnNo;
			this.m_NoOfMoves++;

			Piece pieceRook;
			switch (MoveName)
			{
				case SharpChess.Move.enmName.CastleKingSide:
					pieceRook = move.Piece.Player.Colour==Player.enmColour.White ? Board.GetPiece(7,0):Board.GetPiece(7,7);
					Board.HashCodeA ^= pieceRook.HashCodeA;
					Board.HashCodeB ^= pieceRook.HashCodeB;
					pieceRook.Square.Piece = null;
					pieceRook.m_LastMoveTurnNo = Game.TurnNo;
					pieceRook.m_NoOfMoves++;
					Board.GetSquare(5,square.Rank).Piece = pieceRook;
					pieceRook.Square = Board.GetSquare(5,square.Rank);
					Board.HashCodeA ^= pieceRook.HashCodeA;
					Board.HashCodeB ^= pieceRook.HashCodeB;
					m_player.HasCastled = true;
					break;

				case SharpChess.Move.enmName.CastleQueenSide:
					pieceRook = move.Piece.Player.Colour==Player.enmColour.White ? Board.GetPiece(0,0):Board.GetPiece(0,7);
					Board.HashCodeA ^= pieceRook.HashCodeA;
					Board.HashCodeB ^= pieceRook.HashCodeB;
					pieceRook.Square.Piece = null;
					pieceRook.m_LastMoveTurnNo = Game.TurnNo;
					pieceRook.m_NoOfMoves++;
					Board.GetSquare(3,square.Rank).Piece = pieceRook;
					pieceRook.Square = Board.GetSquare(3,square.Rank);
					Board.HashCodeA ^= pieceRook.HashCodeA;
					Board.HashCodeB ^= pieceRook.HashCodeB;
					m_player.HasCastled = true;
					break;

				case SharpChess.Move.enmName.PawnPromotionQueen:
					this.Promote(Piece.enmName.Queen);
					break;

				case SharpChess.Move.enmName.PawnPromotionRook:
					this.Promote(Piece.enmName.Rook);
					break;

				case SharpChess.Move.enmName.PawnPromotionBishop:
					this.Promote(Piece.enmName.Bishop);
					break;

				case SharpChess.Move.enmName.PawnPromotionKnight:
					this.Promote(Piece.enmName.Knight);
					break;

				case SharpChess.Move.enmName.EnPassent:
					Board.HashCodeA ^= Board.GetPiece(this.m_square.Ordinal - this.m_player.PawnForwardOffset ).HashCodeA;
					Board.HashCodeB ^= Board.GetPiece(this.m_square.Ordinal - this.m_player.PawnForwardOffset ).HashCodeB;
					Board.PawnHashCodeA ^= Board.GetPiece(this.m_square.Ordinal - this.m_player.PawnForwardOffset ).HashCodeA;
					Board.PawnHashCodeB ^= Board.GetPiece(this.m_square.Ordinal - this.m_player.PawnForwardOffset ).HashCodeB;
					Board.GetPiece(this.m_square.Ordinal - this.m_player.PawnForwardOffset ).Capture(); // Take enemy pawn that is now behind us
					break;
			}

			Board.HashCodeA ^= this.HashCodeA; // XOR piece into new piece position
			Board.HashCodeB ^= this.HashCodeB; // XOR piece into new piece position
			if (this.Name==Piece.enmName.Pawn) 
			{
				Board.PawnHashCodeA ^= this.HashCodeA;
				Board.PawnHashCodeB ^= this.HashCodeB;
			}

			move.IsInCheck = move.Piece.Player.IsInCheck;
			move.IsEnemyInCheck = move.Piece.Player.OtherPlayer.IsInCheck;

			move.HashCodeA = Board.HashCodeA;
			move.HashCodeB = Board.HashCodeB;

			Game.MoveHistory.Add(move);

			if (move.Piece.Player.CanClaimThreeMoveRepetitionDraw)
			{
				Board.HashCodeA ^= 31;
				Board.HashCodeB ^= 29;
				move.HashCodeA = Board.HashCodeA;
				move.HashCodeB = Board.HashCodeB;
				move.IsThreeMoveRepetition = true;
			}

			return move;
		}

		public Piece Capture()
		{
			this.m_player.OtherPlayer.CapturedEnemyPieces.Add(this);
			this.m_player.Pieces.Remove(this);
			this.Square.Piece = null;
			this.IsInPlay = false;
			if (this.Name == Piece.enmName.Pawn)
			{
				this.m_player.DecreasePawnCount();
			}
			else
			{
				this.m_player.DecreaseMaterialCount();
			}
			return this;
		}

		public void Uncapture(int Ordinal)
		{
			this.Player.Pieces.Insert(Ordinal, this); 
			this.Player.OtherPlayer.CapturedEnemyPieces.Remove(this);
			this.IsInPlay = true;
			if (this.Name == Piece.enmName.Pawn)
			{
				this.Player.IncreasePawnCount();
			}
			else
			{
				this.Player.IncreaseMaterialCount();
			}
		}

		public int PointsTotal
		{
			get
			{
				return	this.Value //+ m_square.Value;
					  + this.PositionalPoints;
			}
		}

		public int PositionalPoints
		{
			get 
			{
					return m_Top.PositionalPoints;
			}
		}

		public int DefensePoints
		{
			get
			{	
				Piece piece = m_square.DefencedBy(this.m_player);
				if (piece!=null)
				{
					switch (piece.Name)
					{
						case Piece.enmName.Pawn:
							return 60;

						case Piece.enmName.Knight:
						case Piece.enmName.Bishop:
							return 45;

						case Piece.enmName.Rook:
							return 30;

						case Piece.enmName.Queen:
							return 20;
					
						case Piece.enmName.King:
							return 20;
					
					}
				}
				return 0;
			}

		}

		public bool CanBeDrivenAwayByPawn()
		{
			Piece piece;

			piece = Board.GetPiece(m_square.Ordinal+m_player.PawnAttackLeftOffset+m_player.PawnForwardOffset);
			if (piece!=null && piece.Player.Colour!=m_player.Colour && piece.Name==Piece.enmName.Pawn) return true;

			piece = Board.GetPiece(m_square.Ordinal+m_player.PawnAttackRightOffset+m_player.PawnForwardOffset);
			if (piece!=null && piece.Player.Colour!=m_player.Colour && piece.Name==Piece.enmName.Pawn) return true;

			piece = Board.GetPiece(m_square.Ordinal+m_player.PawnAttackLeftOffset+m_player.PawnForwardOffset+m_player.PawnForwardOffset);
			if (piece!=null && piece.Player.Colour!=m_player.Colour && piece.Name==Piece.enmName.Pawn && !piece.HasMoved) return true;

			piece = Board.GetPiece(m_square.Ordinal+m_player.PawnAttackRightOffset+m_player.PawnForwardOffset+m_player.PawnForwardOffset);
			if (piece!=null && piece.Player.Colour!=m_player.Colour && piece.Name==Piece.enmName.Pawn && !piece.HasMoved) return true;

			return false;
		}

		public int TaxiCabDistanceToEnemyKingPenalty()
		{
			return (Math.Abs(this.m_square.Rank-this.m_player.OtherPlayer.King.Square.Rank) + Math.Abs(this.m_square.File-this.m_player.OtherPlayer.King.Square.File));
		}




	
		private static ulong[] m_aulongHashCodesA =
		{
			6557995217205458958, 3216546429887213718, 10981975557637945592, 13117948053612451546, 16462319544570117268, 14109089931958414830, 7784257433824872028, 12575758863506724218, 0, 0, 0, 0, 0, 0, 0, 0, 
			5452803369408346770, 17504272207519905704, 10076908662681196056, 12181556996310766954, 6618282532582206852, 886584768689976646, 5337735909196723884, 1518236921046637970, 0, 0, 0, 0, 0, 0, 0, 0, 
			15827119029725512510, 9082962233660957234, 1263297098503346738, 13875222574635967674, 16609127610647298318, 10435515111652777838, 18329661936892632940, 5331746027401435792, 0, 0, 0, 0, 0, 0, 0, 0, 
			1049717386564424156, 9246948175640910896, 17992694740464130014, 11919617026173496926, 942713142301085492, 16767582443534198792, 2343237112367443196, 7706490310447073566, 0, 0, 0, 0, 0, 0, 0, 0, 
			1180650458668525454, 110739167744257384, 15612783373802952686, 12368533738239614404, 4710529855387962032, 1491317575964475796, 7991609012807777138, 13223305147380179598, 0, 0, 0, 0, 0, 0, 0, 0, 
			9827852277825374356, 8971731418860897980, 5890489662268004190, 621233762326742028, 11437796629142146816, 14858882528073565038, 523346254803746784, 14883403326801949494, 0, 0, 0, 0, 0, 0, 0, 0, 
			10568557893264073862, 7767832610067314526, 1588172969737753022, 7365253622489937858, 3475562964612195378, 15378553259884894290, 10258544682946854394, 16471709323283427872, 0, 0, 0, 0, 0, 0, 0, 0, 
			7387401186393507380, 4836657810614330796, 15117989234145937886, 5053120470808326610, 3415221099905780174, 1032168018064794264, 13326555077905273864, 5458304681770616980, 0, 0, 0, 0, 0, 0, 0, 0, 

			3591490871264005846, 11477029166294441118, 17207443962968935894, 455488295483641806, 4330807740248377940, 6552962174459494146, 8378431705090728210, 14164578135339702830, 0, 0, 0, 0, 0, 0, 0, 0, 
			10465581913979867856, 7923717876592009806, 4111855899994986858, 8853560567149517396, 16585393081409031800, 1554706319225285626, 8114008830732912492, 3371940990714217908, 0, 0, 0, 0, 0, 0, 0, 0, 
			2521660644058944506, 2948542054564828660, 14153534865037268920, 13194226332749162618, 16671450371134523938, 6771401495000981258, 8408199538811145490, 13624210701813922222, 0, 0, 0, 0, 0, 0, 0, 0, 
			15107869283949129708, 10537348939668604012, 112940723069126890, 15819144237224908626, 2892066878009356948, 6893057789012355990, 14974156480460794972, 2664014192529203210, 0, 0, 0, 0, 0, 0, 0, 0, 
			5340980247011934632, 17509454861226944078, 11940453918049674332, 18220748372254471362, 16824233280937172050, 610012363404793194, 12515668202642270334, 1659308426616672788, 0, 0, 0, 0, 0, 0, 0, 0, 
			7079568573131857870, 17463207697321781860, 10673273525780713024, 4208978758881610544, 8283083076309309622, 2755991034385475388, 13199066122313278856, 15647147990663949628, 0, 0, 0, 0, 0, 0, 0, 0, 
			2032444034691397282, 531489711211049572, 3938448369147987384, 13444972959689344786, 6257518099028975776, 2796815787615533756, 13700228577489310564, 3160185983542576612, 0, 0, 0, 0, 0, 0, 0, 0, 
			2200040045247455020, 15327288303752387800, 10495710256153793502, 16273505662658112490, 14721398773463347032, 5206466328696068152, 11485607232664799858, 10023668604770321902, 0, 0, 0, 0, 0, 0, 0, 0, 

			16164111449390318276, 11419626980698143882, 3217985813656852606, 11925939290598446094, 16807230890854361004, 8132383134553493882, 16234001359038311548, 2222980806129073348, 0, 0, 0, 0, 0, 0, 0, 0, 
			12147126317193968708, 12662676227780305028, 7659016084700499920, 15919405972837025858, 5336156159565083352, 8423454768724593766, 2169585031632404044, 14142541111985433560, 0, 0, 0, 0, 0, 0, 0, 0, 
			2583011259453287228, 11286844808399943576, 8374353354055572742, 6722194691202237510, 3911546955319814036, 14360802384881332098, 6382525139320483186, 11397912141720563588, 0, 0, 0, 0, 0, 0, 0, 0, 
			14899448643725947014, 10897806443353667966, 14543834309523647952, 1343268705450754474, 12872137863462285308, 14161292543141927346, 12095639110668341110, 2910582744648050790, 0, 0, 0, 0, 0, 0, 0, 0, 
			5564895272546551192, 13816528074761504572, 4578164982259605850, 12865709233171828210, 14856112534707616532, 17141448801886020236, 6326927501705036350, 13940937044014384492, 0, 0, 0, 0, 0, 0, 0, 0, 
			11694505150302226348, 7921763992326395500, 7697700509538371894, 4534448629453279352, 2845043025763917274, 12394706142921790328, 9305303698502041320, 6745192885713086760, 0, 0, 0, 0, 0, 0, 0, 0, 
			12213175712255584760, 6656715557600338032, 11048561003910172554, 11110761397977851390, 12939332314972678396, 15198141740616770612, 11040779257252314990, 17381604467550285786, 0, 0, 0, 0, 0, 0, 0, 0, 
			4770697911055951336, 8757222608347024348, 1816873549623978120, 5326478122178533130, 1087289619159340200, 11855682151452920014, 7511779647440295244, 18318385218204224596, 0, 0, 0, 0, 0, 0, 0, 0,

			3344936817192064422, 17401255372786163664, 3872772219482588148, 6137944081860966718, 3055734278902581824, 6945616616493087180, 18336212114342542160, 11923731121064839160, 0, 0, 0, 0, 0, 0, 0, 0, 
			4519098124918913706, 12117983363740902858, 7493560463396383966, 7147016527897967860, 5792910241466836596, 9724127137522948202, 6243118658839786780, 13885013441783436160, 0, 0, 0, 0, 0, 0, 0, 0, 
			4778609824380132206, 7011974445843263536, 6359370794641180748, 1665806381701613704, 7205507689655680604, 1227265249673702986, 3466313199543695154, 4223256977058918776, 0, 0, 0, 0, 0, 0, 0, 0, 
			15647860166391471038, 17143997206320015422, 18151665473222025196, 1209194083007403446, 8501083085299244810, 7713214028065421518, 15584711205387884816, 8607440584317730526, 0, 0, 0, 0, 0, 0, 0, 0, 
			16877935960819523498, 152479391901382770, 6682814327425431328, 3214828881490714820, 16937312275420067744, 13348490641085181504, 17803472016395178612, 6008548173903631042, 0, 0, 0, 0, 0, 0, 0, 0, 
			2306524264243502384, 3917445192178345188, 13323860474076086898, 1509493364220519758, 297939423860401882, 11773351517274655728, 6394920637879756110, 745618706588083402, 0, 0, 0, 0, 0, 0, 0, 0, 
			12425172210749952908, 1799385813435961628, 1183216649081491400, 9846358368954191780, 9547455301444961018, 8672793385275941226, 7290761809530633956, 765697254636148538, 0, 0, 0, 0, 0, 0, 0, 0, 
			16744140777532759624, 7512057434271677736, 10329939830924301418, 6915763866881108846, 15537502923271363082, 13842827890401801300, 13275445886735766078, 12396036464926460714, 0, 0, 0, 0, 0, 0, 0, 0, 

			1388206476602946332, 12604574175452993446, 8789111346873611468, 12509962012664031358, 2850409377252911622, 7947066416550965116, 3894409182713062620, 9108449337907075364, 0, 0, 0, 0, 0, 0, 0, 0, 
			10864638592470718524, 162719520516691236, 16957343228882379696, 14333748128682875422, 8622737960702205888, 4196169684417923184, 16760440721733045048, 16644990216076477868, 0, 0, 0, 0, 0, 0, 0, 0, 
			2484296943318739496, 15758064161420148116, 1823742412779931420, 13371718722184545162, 17674727640378858442, 18263782288417572360, 15318000466827519830, 11032596358787439946, 0, 0, 0, 0, 0, 0, 0, 0, 
			245840885151265736, 11728243866590838336, 6918118154900648708, 688765597643637744, 2377264675294192380, 13455269893442642120, 17850438961445686804, 1647207715815469688, 0, 0, 0, 0, 0, 0, 0, 0, 
			13733325228269359148, 2419332685934222516, 1207884240307078588, 14922888442592148292, 3458463330032783658, 7311935566668900388, 8970422960993277058, 8658599938099139622, 0, 0, 0, 0, 0, 0, 0, 0, 
			3054230502498618394, 12397960654450837472, 4872978039965947488, 12319733408774079494, 4488893741487824520, 5864077424484462482, 14708166006776717536, 13481247054196810926, 0, 0, 0, 0, 0, 0, 0, 0, 
			13065572577010239946, 3717179871896849274, 9470609289005981402, 7243170530067618406, 7702391841130663460, 16899418129538396328, 8648599374172182154, 15345423296027576404, 0, 0, 0, 0, 0, 0, 0, 0, 
			16017417564740220342, 14240555326155257928, 3224164359748396308, 14599131993280338370, 14173933314009159734, 9255057131345148678, 15254209989920391856, 13513619034292722414, 0, 0, 0, 0, 0, 0, 0, 0, 

			11960803740756832924, 14990660218859227290, 16288381560637520820, 2824879557307266218, 15183388117525220182, 1503590481965655042, 2209006097086652012, 4446252414168005800, 0, 0, 0, 0, 0, 0, 0, 0, 
			16627819364469247264, 2823247940770448108, 1489334515496216442, 3344555996350009396, 15393380973037338750, 6660139428992074438, 18069099554953020570, 17021260773280033596, 0, 0, 0, 0, 0, 0, 0, 0, 
			16424468978589491124, 12155690854037219092, 647912243374668548, 5517684647854983110, 2088246732055896240, 9056460280224703648, 17763397553263983140, 4830537618690397268, 0, 0, 0, 0, 0, 0, 0, 0, 
			17980888931579611550, 11134577441628307144, 15031757321199757096, 5567343718582756226, 15424318866853701712, 4893622921252694744, 4442863504296324750, 17946061138965074786, 0, 0, 0, 0, 0, 0, 0, 0, 
			4907239486881513522, 12056193894740891242, 11225481049109788580, 13899030677294564950, 5433617801164976038, 11525293649402579286, 17497955483299454350, 14692811270157588404, 0, 0, 0, 0, 0, 0, 0, 0, 
			9705089884582494798, 7259847420451718516, 8221357299467336550, 6548382687886189258, 11634337934724001780, 16428270785335272646, 17328373334178607072, 4833306833697490194, 0, 0, 0, 0, 0, 0, 0, 0, 
			15237347939434069096, 11624782695541192564, 17753791507520697468, 9378923982208539298, 16766949790996661768, 11984010350781213032, 4661576775331958580, 5912477841887156832, 0, 0, 0, 0, 0, 0, 0, 0, 
			1618399316511475318, 4797824379757225494, 9769827708287636890, 9978286463820157612, 17654605667685993402, 2220029364424753414, 7712628500036896260, 601977354988185498, 0, 0, 0, 0, 0, 0, 0, 0, 

			16198045497286566170, 15066518817651085512, 11674572506859055770, 7782756029441895324, 18101358491627647688, 6817607294387684190, 12900583637825338708, 11782521172850240680, 0, 0, 0, 0, 0, 0, 0, 0, 
			10876591988429144744, 8118705223050341604, 8847485636800003558, 17626202140096324018, 1265330542575019934, 7791948755286187134, 5904245549665420388, 15983459163060770168, 0, 0, 0, 0, 0, 0, 0, 0, 
			10599896774180588702, 5028303617488669722, 823371139033120566, 18163081935239432698, 10894853658992277032, 265569971633279628, 13360476310507423768, 16674172752312285190, 0, 0, 0, 0, 0, 0, 0, 0, 
			6204552001601576094, 12665639170158307730, 9677053844687245296, 715172232508078580, 11305249860831420962, 14486990784187916142, 7424916963188750484, 12958719887580342884, 0, 0, 0, 0, 0, 0, 0, 0, 
			18133637841071954684, 169869480430118332, 15943973537935101956, 16352724000820828736, 13244631872682564440, 2352712817505352924, 1896037200654681584, 12715735085130484460, 0, 0, 0, 0, 0, 0, 0, 0, 
			6487554510384000746, 881525408458183072, 7210548449120267868, 1398477378895203516, 10356496154026974762, 4396440639342169366, 6425232113267501650, 7522081727259491122, 0, 0, 0, 0, 0, 0, 0, 0, 
			3053463061419457926, 16212486860888469692, 15701156741900881596, 6154506516404304248, 8407827639560824862, 3965224356486437650, 8364280396468769218, 4493014910987650996, 0, 0, 0, 0, 0, 0, 0, 0, 
			14833773787325157452, 8208885737841763058, 12547545232467850670, 17067552817000416036, 11810455630983138800, 15766617408063377366, 8370205410411106274, 3160859810804582384, 0, 0, 0, 0, 0, 0, 0, 0, 

			10462599958619452926, 9590774916705603800, 4715682666706228304, 17353170092904189052, 13218976393853551352, 18426199526952577922, 2537916211726828882, 4059388623729016168, 0, 0, 0, 0, 0, 0, 0, 0, 
			7016989038808194238, 3550629857938950998, 9406326415411671662, 8817703211919315350, 9421681572500188900, 1513687319508271546, 3281414890847066886, 10878665241293195498, 0, 0, 0, 0, 0, 0, 0, 0, 
			17906835325985481218, 9804850597546979672, 10198234208526790454, 6286900586539669172, 6300209080211638992, 12772396456848845582, 10147596510906151826, 15270665258762884380, 0, 0, 0, 0, 0, 0, 0, 0, 
			3885985236056332098, 3821655003481266838, 906111883223352318, 9575304355208091150, 7853117846141967704, 10436402738964682492, 2399677004377746004, 2330187564018793040, 0, 0, 0, 0, 0, 0, 0, 0, 
			5092216094589542912, 8990305876690967686, 17454800020768591530, 6601523162001835412, 9162744767253837856, 15363365894524788038, 11692135621170375500, 8963449335441989268, 0, 0, 0, 0, 0, 0, 0, 0, 
			12735775156117007562, 2481312222658142886, 8445034828652654222, 5251043379906178128, 4821441965881279262, 10311436906228803156, 17778827883096942996, 17686970880736581900, 0, 0, 0, 0, 0, 0, 0, 0, 
			8336382523324132006, 16255104434813394774, 3913556288757961778, 171521669097497030, 584704248724122980, 4714428131092498046, 2229850204507612068, 14650188408228485402, 0, 0, 0, 0, 0, 0, 0, 0, 
			8021228613930264046, 2449431685254533530, 5261855366043898568, 3780490088037841778, 1646179932179754454, 7601402561819458914, 16918816041532370436, 3014964941227474472, 0, 0, 0, 0, 0, 0, 0, 0, 

			18223988674063759430, 3065727362606402448, 2852017506776277202, 6923241868541995068, 2297334295715853306, 17809212399164824898, 2922280118173986138, 17378007342082060362, 0, 0, 0, 0, 0, 0, 0, 0, 
			3320755042184102914, 724836288104314222, 11077774764964415062, 4016344871879019602, 1117147010581946026, 11840300856067310662, 6135046714864846188, 1427419194335940272, 0, 0, 0, 0, 0, 0, 0, 0, 
			1683767117336272824, 11318966227185947890, 346325405127319148, 13590720889076300244, 5258571877593294612, 3023081284428176814, 9633995897634344226, 8563785085560427834, 0, 0, 0, 0, 0, 0, 0, 0, 
			10639846026616021106, 16913467334468387362, 9625362733124106984, 4921556863397514232, 8806455934410818158, 15603235995724695602, 14529333511805631792, 11992149592614640978, 0, 0, 0, 0, 0, 0, 0, 0, 
			1118114318139987572, 15881120350659289468, 9932369911372744808, 1263107432744127310, 10495115382784571424, 10394179632060235688, 1072078954232623542, 8001379085089345252, 0, 0, 0, 0, 0, 0, 0, 0, 
			14571153690363450594, 18080009409451474376, 10859609056686907842, 16694974174616433532, 15943045085229456642, 6657752632003558522, 14187144686631535720, 12825088730625920334, 0, 0, 0, 0, 0, 0, 0, 0, 
			9423838313605508164, 5851573980567836476, 17437735250958123006, 1612822398473347816, 13979849410623282742, 14083899494126822390, 8076136678948908538, 8316372784867549388, 0, 0, 0, 0, 0, 0, 0, 0, 
			10455716791673477574, 3682794777767255526, 10958801983034516756, 12729551741726962170, 13129688738319188944, 15962029641640367996, 14258323761856670180, 5509092894363686516, 0, 0, 0, 0, 0, 0, 0, 0, 

			10068053600909066890, 13799171697315485676, 9739365072488327254, 11874697635848993798, 7801735642456237648, 18241918703131716080, 10248505701661230624, 7447117981548911460, 0, 0, 0, 0, 0, 0, 0, 0, 
			12651890771728175436, 16601918969050281610, 17082820184183526068, 14650797215031060090, 12478629344555555540, 13129641151611251812, 11252148081318951742, 173269718981918134, 0, 0, 0, 0, 0, 0, 0, 0, 
			11482475308543774572, 17888456028049406822, 1619799392005881976, 15502974029270414676, 17056811981845864078, 17237161170146515540, 9521787808840460864, 3164765276127555282, 0, 0, 0, 0, 0, 0, 0, 0, 
			883590126892036114, 8069981280346567918, 9017313689349954384, 2522394388160319414, 1671648926279625174, 7195721485905770262, 14536203656731610288, 10514755715993673278, 0, 0, 0, 0, 0, 0, 0, 0, 
			1941273072697034344, 18025671786291583082, 6783223017470087266, 1355951601139888354, 982393362466389638, 4943555246134846860, 16839243796718438870, 16227265772712192788, 0, 0, 0, 0, 0, 0, 0, 0, 
			744326921405722688, 980444972375847262, 5928409892568210270, 14868318205222754874, 15387288710406050694, 9590804986818398322, 15868571213089823552, 14387935302503020102, 0, 0, 0, 0, 0, 0, 0, 0, 
			6372687002074867584, 1108351406833023006, 11154440976426839074, 2069720140691574998, 17466306166046395422, 17501951172993198334, 18297197273766008716, 9214628855025347984, 0, 0, 0, 0, 0, 0, 0, 0, 
			11809026131879737050, 2432819917653656884, 4138046899647222852, 17404266352926865602, 961386131944984904, 13188951156669255926, 2119544031616778080, 11433384966034940488, 0, 0, 0, 0, 0, 0, 0, 0, 

			8322112754799500742, 7225642572412515128, 16434870717972331498, 18129098069361896392, 7535505947618204358, 7008835965154161184, 18149635609825984112, 14629226367319797530, 0, 0, 0, 0, 0, 0, 0, 0, 
			5413888737599345958, 6539045591447072830, 14658852713812994918, 3675839463133400426, 13040374761001590512, 3942369572321758478, 16720389394336408220, 6988555750320782744, 0, 0, 0, 0, 0, 0, 0, 0, 
			12117245228928768876, 10381468422342671066, 9604107129766883004, 11743111119337055194, 14597581450423504332, 14483278801542348128, 1283210232357942928, 1859944239777366358, 0, 0, 0, 0, 0, 0, 0, 0, 
			16672359311042229516, 219242288836095086, 11408373454018974092, 2271906838757922212, 17700030838712093036, 15237144689927921496, 17133762144956998970, 5831743846966709716, 0, 0, 0, 0, 0, 0, 0, 0, 
			743087363054682110, 18419051819058372604, 4356795774558063724, 14700385272851312916, 12039882048416392630, 16196474819539037612, 11258733781964864974, 4832651594839572504, 0, 0, 0, 0, 0, 0, 0, 0, 
			3778552368018812756, 978098358104925228, 546171797364455180, 7703637302521788278, 14067005739089945594, 555784113415420132, 2491530014219976474, 6323263865325055206, 0, 0, 0, 0, 0, 0, 0, 0, 
			17110382321811261534, 5360536045565975116, 5008044277141369982, 14864038932044773816, 8796738194901524976, 4179121256977483030, 15457554482660151430, 18152534996168928702, 0, 0, 0, 0, 0, 0, 0, 0, 
			13839173849530016616, 2393950385219159252, 6214331500205344866, 2072128787709894824, 17098862191251694284, 11646715965269190174, 13452066485371323398, 9451166966822417524, 0, 0, 0, 0, 0, 0, 0, 0, 

			10495042241935330410, 2601606175441845348, 10367993686308191224, 10164838763319879460, 1521772675380525588, 4398341780718700120, 1438329793137006484, 18335358809734198016, 0, 0, 0, 0, 0, 0, 0, 0, 
			9093200633068932274, 17193590326275932878, 5314402126269244472, 17868314474924842950, 12318254144001124286, 10341321453020809156, 16739921964800787266, 16729828975924719674, 0, 0, 0, 0, 0, 0, 0, 0, 
			962448725944479930, 18164082327507296586, 11791875157165937846, 9927655835267422072, 3958585910643133700, 10139761499630696038, 2612874156317429702, 7515781022277638516, 0, 0, 0, 0, 0, 0, 0, 0, 
			17990136961915045006, 2399669595651317836, 4949006358503682642, 17261961305020330214, 17617114463836888820, 5992112515661624496, 13661938035773928480, 7969512928110374624, 0, 0, 0, 0, 0, 0, 0, 0, 
			13748307318991879006, 16671203560323775860, 3366045570271433048, 5178313569890927228, 9906544038235355194, 17236418288356601574, 4363823105989992508, 13452548650393591772, 0, 0, 0, 0, 0, 0, 0, 0, 
			15853925466626380190, 14335641328221141672, 11035692330437480184, 16553064582327885182, 7327486438620608978, 8751297039553502920, 11776442246661461690, 16341912906657879792, 0, 0, 0, 0, 0, 0, 0, 0, 
			3821937136091376064, 2065517003299732356, 5973897556780577726, 2599997796122445954, 11483806333275390578, 11386227819947500748, 1148978756265490312, 15372530556150395002, 0, 0, 0, 0, 0, 0, 0, 0, 
			7701127672722700530, 2456437275545042398, 1788841129749838418, 9034852914631467322, 7205281975570448970, 6927577836091814226, 11319370591320447482, 13834196677911322920, 0, 0, 0, 0, 0, 0, 0, 0, 

			17388653037478843658, 11557135153390448590, 9859206372499629422, 16624487750664043566, 7106630031987165560, 3910154057094059388, 12894141377048351622, 13540976065827261862, 0, 0, 0, 0, 0, 0, 0, 0, 
			3573688034213356290, 1527128316864602874, 17110669282237584016, 18056164662192764348, 17141877818507296388, 4965628949440231340, 18298353002015094966, 16887546230194214712, 0, 0, 0, 0, 0, 0, 0, 0, 
			2840567267229847794, 2971880294845069118, 7040298230129772354, 7684328556499053144, 11932924059990722686, 10523335865074583706, 14760279723054836054, 156347100199929722, 0, 0, 0, 0, 0, 0, 0, 0, 
			8241080479915107916, 9236586761717703078, 9286931486468124070, 14280678413949263798, 4287105055708683248, 8061420135730580830, 6406353852029708568, 17687614917818022532, 0, 0, 0, 0, 0, 0, 0, 0, 
			837857564621685516, 15807538121242558212, 5467677016347662774, 6510642643446067836, 17953722952944028036, 3477592319808755624, 18375871809213248470, 16721777939452724410, 0, 0, 0, 0, 0, 0, 0, 0, 
			316235633896686928, 3786798668263310446, 15384207778861953472, 1908507186407541218, 16940806511038869794, 18419719690588134352, 5456794551001800152, 14317086327631429430, 0, 0, 0, 0, 0, 0, 0, 0, 
			8902548288816792476, 7535294223235741036, 16023588832029554088, 187635573527500196, 15022709884042392764, 9514239531872336028, 2986415377146285540, 12339248604114694174, 0, 0, 0, 0, 0, 0, 0, 0, 
			10102939798094035212, 17200596260016495288, 6346111505475475434, 1042966345465018442, 9085504805684424870, 17753811533601666020, 4771683997878629738, 16820290063667914472, 0, 0, 0, 0, 0, 0, 0, 0, 

			17545613622841681746, 10501891328749148278, 9426908387088153308, 8877089434143743062, 13459885476225016672, 9185958386474511294, 5120516392545654832, 14165698063145622968, 0, 0, 0, 0, 0, 0, 0, 0, 
			6847708915845601312, 7355483455673498960, 16494535249479569034, 11705033033488649218, 18251350343559018236, 15065819270541461548, 11376452399259816238, 8593254708121809928, 0, 0, 0, 0, 0, 0, 0, 0, 
			3766479623975822972, 14086321667423203714, 8622476836776146302, 12842960888468376816, 4068737430762310318, 14133956764673292544, 9083206044346845834, 4011875571403032608, 0, 0, 0, 0, 0, 0, 0, 0, 
			15625060894836009252, 1889265324647982124, 3665329999209076784, 6312111210106831900, 5532502273248938888, 13425407484649116734, 17896713095005619428, 4834726832543450412, 0, 0, 0, 0, 0, 0, 0, 0, 
			5561303255605950664, 7127197816163928908, 2595006774291545308, 12652930689033263362, 3940050985010175540, 13567225257720373740, 10711626861993623774, 147177847809271834, 0, 0, 0, 0, 0, 0, 0, 0, 
			17477047963492222950, 8136956387404159526, 3117970724319799752, 12147741636872885940, 2242179716208357412, 2562319680788492322, 11061192320938775572, 7908171076188569374, 0, 0, 0, 0, 0, 0, 0, 0, 
			10498288624450659978, 12563302206478880838, 5730579894377095228, 16308430302931869696, 1831469209542535446, 17992566768689471744, 6394314967729364118, 9945922527443908708, 0, 0, 0, 0, 0, 0, 0, 0, 
			2383769403964594706, 7243572543467171602, 9673519885520955480, 10302479083779678424, 1222978968320988764, 14116760955714134862, 2778999516988478224, 272137612191235292, 0, 0, 0, 0, 0, 0, 0, 0, 

			18362019642220520632, 17755149605427691238, 8160413835264563194, 7132858826473086762, 1007724277759928980, 15743651996523805876, 16025805139638878002, 5161082153409826282, 0, 0, 0, 0, 0, 0, 0, 0, 
			4100462926474833894, 18208079740419987330, 12846472991818489784, 12978259235470649460, 103456753621245066, 4651193507658424492, 11390664131773545164, 1691469575270734918, 0, 0, 0, 0, 0, 0, 0, 0, 
			9801623276000129460, 15400126094246462240, 6962005964312803656, 2710151849400758610, 7163633941123730330, 1436113090146831650, 1214131491520122768, 8288602715461326300, 0, 0, 0, 0, 0, 0, 0, 0, 
			7209397833038329266, 783510774798573244, 17515929933458189902, 17163480899148848852, 379162074805962044, 10359452548550129722, 4904889499145281694, 1730782921886347280, 0, 0, 0, 0, 0, 0, 0, 0, 
			7733798654773319900, 12083689413807324462, 9733741507736632334, 8563518115659578648, 8234679590580718066, 12635745401699872526, 3515796062346602382, 10313807708542751484, 0, 0, 0, 0, 0, 0, 0, 0, 
			9590243228481784796, 18312820394031351710, 2268411402138529460, 4541508915905349356, 6640998182349241626, 17062855046952176728, 10862370304893891180, 7344870253133488396, 0, 0, 0, 0, 0, 0, 0, 0, 
			9839681346578731526, 16129457661828346648, 1010661346002988452, 8927068749858475488, 8947055826136189964, 8222255366307327972, 5068238261620947038, 16561976205883417194, 0, 0, 0, 0, 0, 0, 0, 0, 
			13876150851661739334, 883937720935685786, 2629899801469577772, 12749005373783752508, 7133681984040306688, 10631558025487873470, 2153981768149090976, 13580534170312191286, 0, 0, 0, 0, 0, 0, 0, 0, 

			8435020523903278100, 3899549808124225056, 11740181989979615358, 2041080558069095060, 15499985976758967078, 16351352178717716834, 3155488787503514122, 8918355425615710116, 0, 0, 0, 0, 0, 0, 0, 0, 
			1716338329987971662, 8634976736576939216, 1360184205345850660, 80685516177902610, 435671442675900540, 9096124201126564186, 15527634424542698474, 1804657981933081670, 0, 0, 0, 0, 0, 0, 0, 0, 
			1458585183149351304, 15930460019289889874, 9122907559677149454, 1384733279166374968, 3287866371596040874, 11433439859207289334, 16099084153461366154, 8353404166395274294, 0, 0, 0, 0, 0, 0, 0, 0, 
			7594431612145172426, 5678654864300847890, 2296316498868683128, 16117104527415964124, 14987129460127342310, 18303810239017957078, 18036186145600152580, 7580821818782221008, 0, 0, 0, 0, 0, 0, 0, 0, 
			8988132497386417792, 15400483954176547520, 5004883764012434498, 5703741608894025110, 5062492724851822130, 5749127852241007686, 14609076854938214498, 6028471000313416526, 0, 0, 0, 0, 0, 0, 0, 0, 
			5426572427479225114, 12831947132453655008, 2914874623825477326, 1547932765128748618, 10330657800124228258, 1245833917906384314, 9151243598656517166, 13970250372540654636, 0, 0, 0, 0, 0, 0, 0, 0, 
			15690282517834573640, 5604322317368605636, 16679931897902273436, 1796595831797282574, 8332875789471016014, 3728652341858720794, 7020228664937759766, 9750376307427285518, 0, 0, 0, 0, 0, 0, 0, 0, 
			1942847270524820678, 8134801327608615504, 4080113772526894578, 2491070703886044058, 13360655509619370760, 4179639504456877008, 2626178361387543956, 6727224916781954734, 0, 0, 0, 0, 0, 0, 0, 0, 

			697049003402709900, 7321409807090816720, 17901567487103664554, 8507828525102310766, 10433420987590654640, 12016764149121530488, 17308671610707428838, 14009049094914124466, 0, 0, 0, 0, 0, 0, 0, 0, 
			15287793111852817750, 8398193963619866050, 5008982554089882718, 6625760951806960864, 2995411598035499012, 17342320092550096848, 3741401159892176084, 1407742525582738534, 0, 0, 0, 0, 0, 0, 0, 0, 
			10643985204325275962, 12492660627384936138, 15023543365913601418, 11241491059163425242, 12412310737539243594, 7022196888866678986, 8902307296966089434, 10965251883966128392, 0, 0, 0, 0, 0, 0, 0, 0, 
			14244819358008232412, 3496444803019880812, 6547680326320028812, 9996928622696526138, 17550526766438310738, 15074498431219699226, 7550803613155793554, 16649414371022742478, 0, 0, 0, 0, 0, 0, 0, 0, 
			1986542532258149386, 1778303755541528356, 18115431151558693510, 5384847065516003948, 1859360829755063438, 2335426881333950402, 10041687238838600326, 10333940178308817956, 0, 0, 0, 0, 0, 0, 0, 0, 
			10457617226699114194, 1519501693245038512, 8294925956231854240, 4420657647900632912, 2947897131352196172, 14062527908476704318, 4059262799481613732, 333160343173988928, 0, 0, 0, 0, 0, 0, 0, 0, 
			11546802147115496736, 7396825621132614272, 15518522782322793380, 6721404768863368010, 11903292086227233898, 6658021771352009420, 14640054058612891042, 11140487344450186652, 0, 0, 0, 0, 0, 0, 0, 0, 
			7114792558576697934, 3387505862897350554, 15640531184607830958, 16616720283676109202, 9936727893764837680, 17947404418416194658, 13209421771296978272, 8112652134469098058, 0, 0, 0, 0, 0, 0, 0, 0, 

			5665404442519041296, 11652329987666154062, 13854588595341168890, 6514112100154166760, 3626875270923978286, 16038900008469934550, 2400067158618991236, 13603071526515112366, 0, 0, 0, 0, 0, 0, 0, 0, 
			1020499343493341262, 3415488412138256228, 4669837224676070028, 7705332113226008316, 852346498047127774, 9285589157583961426, 4120166983739494728, 12698067291240684258, 0, 0, 0, 0, 0, 0, 0, 0, 
			18229560719552215186, 2069589819650391054, 8147135925684561782, 7447996661810213310, 1815094731655449896, 11295999133625140404, 1208441532669388528, 2831842216804409250, 0, 0, 0, 0, 0, 0, 0, 0, 
			3373645269785229750, 8572181569484468984, 6168268300526695776, 10392300361129127386, 15135424525234907672, 7686261396165508762, 17132353351720071916, 13284530247892685780, 0, 0, 0, 0, 0, 0, 0, 0, 
			12247994756660140162, 1166050697516006116, 8821632965105408036, 1842802062817658228, 18075120208551426582, 2723586755659008986, 17863756796063009144, 8053261149661880062, 0, 0, 0, 0, 0, 0, 0, 0, 
			13253794882948269498, 9988608050061241120, 8742296581241379190, 12303890603744907326, 12204503846089050952, 14459801701612119276, 16597093992593754204, 97473686188079102, 0, 0, 0, 0, 0, 0, 0, 0, 
			6442228234539520012, 12979411897087179894, 14163305775019345300, 15275631168831220392, 10717209386685992858, 9704491539566463286, 3541499240924978424, 2441609699312500632, 0, 0, 0, 0, 0, 0, 0, 0, 
			7992470224703833816, 3213469385909055804, 12088361536403549074, 8993005965618334956, 10466394278834302270, 1659100440994349686, 735439209011868520, 1302011778386667484, 0, 0, 0, 0, 0, 0, 0, 0, 

			17377572500295275834, 6003140462065580108, 15064357806456510530, 8938545766682692900, 12044960507722261700, 6672931493094911108, 4205932370964761232, 3273263430766591282, 0, 0, 0, 0, 0, 0, 0, 0, 
			12954893346695653204, 4456581349884521276, 11964959556245653746, 14611741444683672234, 4319815233314161340, 6338505257809472084, 7079562779122952088, 1425555313942491660, 0, 0, 0, 0, 0, 0, 0, 0, 
			11732457201854548098, 16659192675455660258, 4625163344326626948, 14365425020564515972, 7923396323588240282, 14003714631671619558, 3973931139203065886, 1226939725772574054, 0, 0, 0, 0, 0, 0, 0, 0, 
			16573576071605566610, 15966251362696382904, 18210862833159108758, 1671653095605261336, 8871523210020380196, 7665034417058761088, 7873349992079541068, 8069141792002954272, 0, 0, 0, 0, 0, 0, 0, 0, 
			16644371083298261274, 4153219780130355226, 13159501946245857746, 4234841917868207438, 16456988767024439132, 769721632228695900, 17029164728979186056, 9587239647395780446, 0, 0, 0, 0, 0, 0, 0, 0, 
			5696695586663974828, 5973573164245466284, 2063961051660522344, 15839727411994695414, 199459669052927986, 14946005510656560718, 5533074920594268180, 6116357638203448478, 0, 0, 0, 0, 0, 0, 0, 0, 
			15159826749400631356, 13744751880460335086, 9026630115817166006, 7852659349782449736, 15748347900373409472, 10303683974714885240, 4934670569553498714, 5376778982387108370, 0, 0, 0, 0, 0, 0, 0, 0, 
			12015722847322421430, 9842844136790033124, 3894681422355049106, 18250672835590363806, 5806929370079168862, 15352553644500412078, 14654587642685911044, 18042649453071963336, 0, 0, 0, 0, 0, 0, 0, 0, 

			17946573602882554118, 13962910691463550668, 16603681017769630714, 14141697429650567752, 13670751367401967586, 1916656545840761708, 3927664540621357484, 14293693855662677964, 0, 0, 0, 0, 0, 0, 0, 0, 
			4714727513351594798, 2451581932705223666, 4381502341697200100, 4368425723358635250, 16984091860706930006, 10506107317147062878, 11955018622346451922, 8382705398529510864, 0, 0, 0, 0, 0, 0, 0, 0, 
			5267469662070717464, 15301853718377696130, 5222468855080464434, 1358335983519133394, 7051305686615951504, 17616396652300564706, 8134866340243791392, 5814958151369686802, 0, 0, 0, 0, 0, 0, 0, 0, 
			457785384807912768, 8217216080001079036, 5810600813959238594, 15991251238118112550, 5978035660977549408, 13177562916699893330, 2868137598350523944, 8991218831506932804, 0, 0, 0, 0, 0, 0, 0, 0, 
			5302773656371663436, 99095853610299912, 1788587076509008122, 15112254392804371782, 15295242803414544518, 1684514525904896578, 2470812776919717972, 7393397109069194014, 0, 0, 0, 0, 0, 0, 0, 0, 
			9286670733503693516, 12864308131921283858, 299574971472822716, 7704229009114953650, 14034285214502605382, 15746713050279214390, 15027030930736934586, 15949364634273287416, 0, 0, 0, 0, 0, 0, 0, 0, 
			16822520072905265460, 14848813016659555092, 14537935247989249588, 5373799921628301034, 15152638234304405174, 10734514395627169250, 13893775247432360360, 12593229840062092124, 0, 0, 0, 0, 0, 0, 0, 0, 
			17588233516394403022, 451967259535062642, 17787201662645497054, 6494717919564680886, 12284744786550852738, 14556766516337798076, 4508316373383323934, 3696268089422111322, 0, 0, 0, 0, 0, 0, 0, 0, 

			376856387213271802, 15606748958390861436, 5732467499142395644, 9581842342894809158, 536378430474277914, 15225357924859506034, 8069032853482777760, 7384081406293592336, 0, 0, 0, 0, 0, 0, 0, 0, 
			15225166930785196042, 1814803006099418416, 10923943020757249104, 16016724822513309850, 11851598054492819932, 6694173686584917496, 16294039626277543736, 12523690005290728416, 0, 0, 0, 0, 0, 0, 0, 0, 
			13754410116007817116, 6587525011057060358, 424818951823364514, 3516274216476325514, 16299747102147407044, 386260018674172502, 1181399325845063318, 8175942810166613660, 0, 0, 0, 0, 0, 0, 0, 0, 
			6444717557543992850, 7257905226454997080, 14737807439390237316, 7836126903521609200, 2869614908772334080, 8748198205844139340, 11145048314964365048, 14715331818239684454, 0, 0, 0, 0, 0, 0, 0, 0, 
			2175690806553480386, 13011197415931344278, 9751698169708401138, 5743097684795304526, 14407433447032538862, 14113563889617871046, 15735361926695798198, 5962319320571728278, 0, 0, 0, 0, 0, 0, 0, 0, 
			11337071994687828362, 11418784404017101314, 2203391709908825184, 1843267239672419600, 7076406494178840658, 11416911575529081870, 1937903514921520280, 10021566705031748660, 0, 0, 0, 0, 0, 0, 0, 0, 
			1293281435200205942, 8739888437745858676, 7678080003840364226, 385807219277634006, 1568351457825203838, 6816571066377938896, 4635963329449693942, 5210167904902542444, 0, 0, 0, 0, 0, 0, 0, 0, 
			7618592618489250390, 1459725527312655116, 7673205590265214388, 9454976843229183074, 4889830829399948388, 12496991763280251212, 2535557256724202966, 11994251123662957068, 0, 0, 0, 0, 0, 0, 0, 0, 

			9047374726642685298, 9236970123329802762, 16538397916652949686, 9412423927210351996, 17597353957404741724, 16819058554428634608, 1182306188088432788, 16679378206943874156, 0, 0, 0, 0, 0, 0, 0, 0, 
			11048997177922059402, 14461917155561994690, 8821188066289112540, 2569542586880334858, 13736757234172381344, 13044945776504547232, 7608552545217389344, 16924925724737344722, 0, 0, 0, 0, 0, 0, 0, 0, 
			13490273190041058056, 13544483681849785854, 13268030184260732328, 8341577007587616552, 11981385645784138840, 12739813663858401146, 15682750692183998074, 13741999556868179034, 0, 0, 0, 0, 0, 0, 0, 0, 
			7863061824753666954, 10711848567370886900, 1851928939872651412, 173994800101321724, 4955687640643085748, 9096840850576520668, 17009761012092243288, 7108951253016709586, 0, 0, 0, 0, 0, 0, 0, 0, 
			15432573436140201210, 9061544758606553434, 3304444937613904472, 16685609420141789022, 7277436274459389088, 4182216630949380800, 4900295465920426874, 7443051037428928618, 0, 0, 0, 0, 0, 0, 0, 0, 
			11273828603417989344, 2352469712881399772, 11673986160580734754, 15690864393370035402, 5478627578491943926, 10897796410971510558, 4704034473513099804, 13234864866507084236, 0, 0, 0, 0, 0, 0, 0, 0, 
			6134186279371533766, 5206306754534358172, 13007546367055059150, 13167085736304116432, 12275204124803464024, 4716013566410744270, 16677567026592534722, 4171098949464447236, 0, 0, 0, 0, 0, 0, 0, 0, 
			10802836935503779922, 701866167495747064, 3054889532304523998, 17059421217919118712, 10468886650443821178, 13075717577531753708, 16171956469496148926, 7507204263148125046, 0, 0, 0, 0, 0, 0, 0, 0, 

			535070851464515888, 11011262178080311678, 1056853323583859822, 14513411946322362968, 13722327066591950122, 12712625604069112286, 13223507269536054182, 11844153752562103110, 0, 0, 0, 0, 0, 0, 0, 0, 
			12390709658593153482, 12204554713087954972, 14349454703919723704, 1612715212521958476, 15757901246024590964, 1716193147451670270, 909852175890335094, 15370917412142066098, 0, 0, 0, 0, 0, 0, 0, 0, 
			1728933757882648298, 8448628683348615796, 12123255935135256628, 16244465656445562864, 795316636322912160, 12063200268377639260, 14915652542647832660, 2915580400020274394, 0, 0, 0, 0, 0, 0, 0, 0, 
			7078087096128525856, 2747084540107334592, 5924041513155809726, 5740860192226924074, 8493161838905553140, 164118427865744620, 639663497152624722, 2451739645492093062, 0, 0, 0, 0, 0, 0, 0, 0, 
			6870121342546334152, 1986759699792393934, 1697231316389591104, 12839372130162943498, 18051518219809926910, 16863229931647879576, 1870051230272811146, 8378939526766460510, 0, 0, 0, 0, 0, 0, 0, 0, 
			2576794903071643014, 13072327487576715388, 1526197592724647010, 12015074863258546570, 9107061268466920626, 10772499169423062352, 884252003474075916, 3622759036444231710, 0, 0, 0, 0, 0, 0, 0, 0, 
			7164634288339533838, 9997171336275716664, 14151337748627442430, 11389069039320883556, 4661903214707930728, 3105956753327505464, 6239063152221592958, 5893564249273485776, 0, 0, 0, 0, 0, 0, 0, 0, 
			5342486987090431266, 5836543708096937226, 1647527533801903614, 2004799178205711340, 17029458641467441136, 1487219028898936132, 17367531743422558152, 14720464409431075348, 0, 0, 0, 0, 0, 0, 0, 0, 

			1558077578039975344, 13860830786044768784, 10517244390486947730, 17022065221998100252, 10250628846810531174, 787267214724421270, 17282423542939038802, 10923040188982833060, 0, 0, 0, 0, 0, 0, 0, 0, 
			6711754163701036710, 17968693316859942366, 1952328545224446088, 9261204598374683750, 14304420986401391762, 15420740490330437076, 2448570425163893370, 12683640306206648310, 0, 0, 0, 0, 0, 0, 0, 0, 
			8330502810449932548, 15814648749565247974, 15915118991247025636, 8122364383198329608, 8330159730996266756, 12363411138832883944, 10413633595182886438, 11179696256598581212, 0, 0, 0, 0, 0, 0, 0, 0, 
			2237592972439708648, 2255194386978233350, 10839893033571845902, 15890845364239956164, 13408204945565476890, 5753825721379036740, 1939266150952902496, 1479244964221623522, 0, 0, 0, 0, 0, 0, 0, 0, 
			1346208858283752512, 13679470843319856972, 16440996502217024322, 17156633379667530144, 1191044343461553508, 4449344272173312734, 7582264404284676646, 6261346191105489334, 0, 0, 0, 0, 0, 0, 0, 0, 
			12196682178559230614, 11901276765965488964, 3291256350584031330, 18012161963281745454, 3778325114347582702, 15703696660180311860, 8529402902751379866, 2160345441878788930, 0, 0, 0, 0, 0, 0, 0, 0, 
			16442464919516802648, 1825045828428699142, 12469796883569673068, 6221478891926613422, 10268052443762121100, 13217119802337340486, 430524667900128926, 10339101214570329592, 0, 0, 0, 0, 0, 0, 0, 0, 
			17685628888905325398, 2392228307787908902, 3140581098169617940, 4497969095045074068, 6075935446294553584, 3039220642247904180, 7657406463893249544, 15139342789550444248, 0, 0, 0, 0, 0, 0, 0, 0, 

			865355807191259468, 6279126667529299844, 14383540414544334254, 7864355081158328224, 5328117748130550338, 496808088723362266, 9965408507556679224, 3124745750444298358, 0, 0, 0, 0, 0, 0, 0, 0, 
			7115899893391684798, 5171369147873141418, 4561894164142196798, 5880574106513400518, 8807526931934582038, 18304895138076465394, 14058555647262135616, 10477443914198132626, 0, 0, 0, 0, 0, 0, 0, 0, 
			11525605516087800140, 15199201062077445936, 3322608585540383280, 1458066964785818986, 6449518574670049000, 12042490317506771720, 9172651599754246990, 12691276999830592106, 0, 0, 0, 0, 0, 0, 0, 0, 
			13913342625004988374, 10123952130947414598, 7737824311586850344, 1659215962546204404, 15774776097797397116, 13800303307694108790, 1525288276994492676, 15432307423560251896, 0, 0, 0, 0, 0, 0, 0, 0, 
			12133271932643440672, 13602399628926601836, 13915390647036876360, 12752208412494523924, 14138578297288574142, 10230582548493278560, 16208109186136934426, 11242965770532956578, 0, 0, 0, 0, 0, 0, 0, 0, 
			17108761941570390008, 10799878794521875348, 8343579280620732208, 17495903773051558162, 15341670246306105332, 15237163227516792352, 13504056511348737166, 574519821556648610, 0, 0, 0, 0, 0, 0, 0, 0, 
			16250339875029676684, 3193012847170915432, 6061519854697965292, 11628816252577707618, 14987796622672231894, 6457556980216639346, 14586331542457865906, 6115976552797342500, 0, 0, 0, 0, 0, 0, 0, 0, 
			7654378081606602008, 5359484951795705046, 3195545882598988754, 9231510513697031068, 10293785431318356240, 8599862975129558302, 2241612777117998600, 6627940788786378806, 0, 0, 0, 0, 0, 0, 0, 0, 

			11248613652772964840, 9867562046520357430, 10762961564886105086, 17912360135266294252, 6137801022687168534, 7450294350237636330, 8673003316156722122, 1551584234406051084, 0, 0, 0, 0, 0, 0, 0, 0, 
			8879851239734444310, 3298086420824746388, 12290672110953044322, 4377310946238480948, 14124516079542267716, 18429377446360330148, 154925330222003822, 3253324007385666938, 0, 0, 0, 0, 0, 0, 0, 0, 
			3522617902310212192, 3823763627277939174, 13040344846727103428, 9365370363932440862, 2601093092202284894, 12306598068256060004, 6444051603838365636, 13435721984002998476, 0, 0, 0, 0, 0, 0, 0, 0, 
			11490927046042207184, 10213411068904417604, 16134197443524259318, 3570629337421124066, 10689627290620898206, 18286683842429065230, 15244151151964193454, 5640097913579118294, 0, 0, 0, 0, 0, 0, 0, 0, 
			9258384421522928408, 2649882614677790050, 9207855004198191824, 10336055121312686000, 9788236449784354374, 230929291847714332, 17082565069101918352, 9523970584533592504, 0, 0, 0, 0, 0, 0, 0, 0, 
			16810027511544030078, 4471254318550087450, 3780261039075246620, 7017687316345435632, 16067344076312222392, 12460256599674315226, 346174256802339310, 8184517372502489226, 0, 0, 0, 0, 0, 0, 0, 0, 
			11815712727279033294, 14164477658675063572, 3286619963997639364, 15137681719951228660, 5551080661963290624, 13193019507992621266, 5661196312708540864, 3812203635369484026, 0, 0, 0, 0, 0, 0, 0, 0, 
			14586928056061963040, 11572057666775746064, 12261080388853408614, 11530480955062890738, 5905715184619594950, 2108558540771919448, 1876310604511111936, 570757121617527854, 0, 0, 0, 0, 0, 0, 0, 0, 

			12574549755802785100, 16443082542517785584, 13660257824871647756, 10375864877109868060, 1283349257239643672, 10480357514724298848, 2102062019674942696, 989790992628661580, 0, 0, 0, 0, 0, 0, 0, 0, 
			14939652393423059292, 231455403060740746, 15392985165526237332, 5893899204362377590, 15008487300607378992, 11377605300049401144, 5493943625605771438, 15084802208311748772, 0, 0, 0, 0, 0, 0, 0, 0, 
			13081355929189939042, 7691848474250524724, 11623911448789886910, 13148064604868513030, 13163162833643235934, 11059634676581784930, 10285715861788859010, 1125679358816511802, 0, 0, 0, 0, 0, 0, 0, 0, 
			866560257097973228, 16327211911960170402, 753015219923774866, 16020360496210947446, 17559545064826196778, 17632211976902572378, 6001120892410884796, 13021499343000033068, 0, 0, 0, 0, 0, 0, 0, 0, 
			14651886035150488788, 17043919162345589338, 9418378763215436714, 11515131931290159184, 12041514478951658432, 604370375018902232, 10433813284759390520, 11386371170357585286, 0, 0, 0, 0, 0, 0, 0, 0, 
			13804241403229057346, 6029395824271849256, 12328732560774604488, 8657823677826162866, 5082818429977555956, 13788688739026655074, 15389883126715731282, 13188842905087081942, 0, 0, 0, 0, 0, 0, 0, 0, 
			6004212527046359542, 151682343326847282, 13121484094528126202, 9026882584342862000, 10907593889918158360, 7824692746031570184, 9231422046861836774, 13514074272773039012, 0, 0, 0, 0, 0, 0, 0, 0, 
			3100982014055121238, 14757592218523752370, 9998502826155052952, 10867335607806085638, 236251896405141026, 4633802842890611318, 12290216048587548728, 6343997214846151486, 0, 0, 0, 0, 0, 0, 0, 0, 

			12546256788429414614, 7346590159090898872, 1910645845191885626, 7613456991998864408, 1257300629547237890, 15982970140982851124, 18065977918562117988, 13354618790967023204, 0, 0, 0, 0, 0, 0, 0, 0, 
			7862542064937412426, 8640504691416745384, 11132913189808230050, 6883576888016815548, 5895275992186628152, 13407605161039092976, 16613750691006366182, 9257545216548539448, 0, 0, 0, 0, 0, 0, 0, 0, 
			16031602835462559762, 12174142934909439442, 17729850319316984376, 7021705261165517812, 10765314813941717070, 14316450804107691086, 16975404262333382076, 12095962101009375446, 0, 0, 0, 0, 0, 0, 0, 0, 
			5434804966314244320, 10477307858349194114, 15519704187775219932, 2309022557315340600, 5558053865366496958, 8363780747429658572, 9761671972773884808, 8776585492341382752, 0, 0, 0, 0, 0, 0, 0, 0, 
			7702142152139308852, 13982852161346350606, 15794392850095949078, 3072201955657152758, 12435133696824789186, 5155623077663366592, 3840470406078852464, 15546035504034243142, 0, 0, 0, 0, 0, 0, 0, 0, 
			2153672793673846158, 7041908033609735608, 15407705149790403162, 16496591524907421450, 10558048989957822634, 15338953791704782694, 1402407589169538244, 2098453738245165024, 0, 0, 0, 0, 0, 0, 0, 0, 
			5615827304220133966, 12409142197339343588, 4767223267309505778, 17620047505688233498, 2790610284495220908, 588320950435257288, 11202678572098892374, 1273054796030972944, 0, 0, 0, 0, 0, 0, 0, 0, 
			7895845664058799472, 8611949344282249520, 1116144909379674922, 12332943432442630428, 2901918370502331920, 14402401161379450964, 15569887859930327822, 9367848067952692314, 0, 0, 0, 0, 0, 0, 0, 0, 

			12815326686472519484, 5308181965105809754, 5164919086280637590, 8461387537298351672, 2662446597911936862, 7487674107073322950, 8705932712288014476, 14674061861435386334, 0, 0, 0, 0, 0, 0, 0, 0, 
			5866898558452488668, 14436135406284140414, 4916208669931043272, 13860978617199743472, 11759249471220983190, 14582570900866408460, 17993561152574328192, 18360075976607102910, 0, 0, 0, 0, 0, 0, 0, 0, 
			16927975685139029548, 13860915769745715402, 18057511982608164880, 14145454402284114474, 14846463133546700078, 17049882522642407632, 6554014740719358680, 16390374196251235456, 0, 0, 0, 0, 0, 0, 0, 0, 
			4610142609092565864, 13846625406451411828, 4675043300638850448, 16956667491188383846, 13854169207705695788, 5432284267464161364, 4114478815145405460, 18210450856010932972, 0, 0, 0, 0, 0, 0, 0, 0, 
			4097805779587791624, 17439898375771120804, 7821290855422958278, 7465687259897330378, 6217875029049333378, 4528270037247371610, 18335148490022473244, 5979548621488877694, 0, 0, 0, 0, 0, 0, 0, 0, 
			5565462408955299854, 17513820594441886616, 8059175870235130430, 12772173059196268520, 17858233329294182226, 5169737541088808380, 14119324954798424146, 8331620850412589616, 0, 0, 0, 0, 0, 0, 0, 0, 
			5849093360039291666, 13191819278277878280, 3566093324279633994, 15434043348652268126, 16564904576723576666, 8896563372544975064, 900501349286044254, 1835865508081663162, 0, 0, 0, 0, 0, 0, 0, 0, 
			8149796299673973868, 18192459421073970660, 13933898763577119544, 4919137995194581108, 3939666128435692462, 4587419056913994656, 16310497896638908144, 15165612748254508654, 0, 0, 0, 0, 0, 0, 0, 0, 

			12366868093159904624, 7071520018226250700, 13746598835393570586, 4056986500812381822, 2508284103695684746, 6136693039834339942, 17435856759099910106, 10632599001342539102, 0, 0, 0, 0, 0, 0, 0, 0, 
			11482069868457939428, 514038740218592392, 12910615018616371894, 5104883016668304598, 6590881878555721176, 9810678521111707240, 17500113387849201650, 244857272548357748, 0, 0, 0, 0, 0, 0, 0, 0, 
			10013573926248506846, 11393973100561011518, 5995943575768863286, 849207472151222556, 11775213702508580226, 9515175945957788830, 10222338128858799208, 17817351815007175904, 0, 0, 0, 0, 0, 0, 0, 0, 
			2928231783453783960, 6623179149250691880, 12613575558639053322, 5852086188165532564, 13406127313102857474, 13113184387886830880, 5042015534591917864, 8330511889702720014, 0, 0, 0, 0, 0, 0, 0, 0, 
			13814624480221141648, 3707383914834924992, 10174021227196133278, 832893490561721676, 13219118853260988798, 17630249976327248250, 14198408671021479692, 17908765174969641832, 0, 0, 0, 0, 0, 0, 0, 0, 
			14574288419507035364, 18165563324048120612, 6377777309180521800, 237132834574475890, 1375199495711533578, 6145342344436314854, 8682252018951690100, 16282770128994842100, 0, 0, 0, 0, 0, 0, 0, 0, 
			11416208634796958950, 16231092672143551398, 746667730550664964, 16225209753543096664, 10949552583810700578, 16637675475371771328, 6236718955264179728, 8146465695421072112, 0, 0, 0, 0, 0, 0, 0, 0, 
			10758656707043074572, 4076542697265433868, 10831816128657615714, 15394725236662833850, 18120307938701317816, 1652996859802113722, 8988838764815750566, 795351071877884504, 0, 0, 0, 0, 0, 0, 0, 0, 

			17878332885672964256, 16395961803841195792, 707868595208393244, 13307774478803832746, 1327116449268315266, 9025073844776002672, 16720452952253915780, 14989933521962998760, 0, 0, 0, 0, 0, 0, 0, 0, 
			12006799496238147774, 14496648668261409114, 7311336330078810476, 17653504862401133978, 10344936442849947062, 5594959960650556686, 12849989987903973270, 17080542646738804964, 0, 0, 0, 0, 0, 0, 0, 0, 
			8165777324835923828, 8590302529124563812, 18061798752881017744, 17807648424890013306, 4366108772990137730, 5698200627028185684, 5223586336974252988, 6225425788532058984, 0, 0, 0, 0, 0, 0, 0, 0, 
			15505334001111155972, 5503992139699058776, 14404643434200569322, 16755898552040317206, 11393096563007311330, 6170761638116643604, 9744387922668267206, 1026296539312930600, 0, 0, 0, 0, 0, 0, 0, 0, 
			11141545058220513362, 8145813248361897896, 10800645511383830534, 10102077514590306772, 12383825779911782458, 3976598833844332676, 17255663846652501552, 11578849120627219942, 0, 0, 0, 0, 0, 0, 0, 0, 
			2532424811164546202, 18064356285894269800, 5409673417863786502, 4309318727919902738, 3166037839758037720, 3970907044860029558, 16049534591075511026, 18402160992570704650, 0, 0, 0, 0, 0, 0, 0, 0, 
			3782292292005865524, 8863990959943741396, 13033749707467157726, 17532025814040036556, 163899639543454376, 18353067935968824972, 15725197237754938168, 9382923163885928194, 0, 0, 0, 0, 0, 0, 0, 0, 
			6433574609701471884, 16297142276229853870, 2908510606657886054, 7247395980194717016, 15630074183867346020, 8461644774752148246, 16064602700478823576, 17926923448347010736, 0, 0, 0, 0, 0, 0, 0, 0, 

			9487486157735094776, 14124570221350054228, 3680301562690119350, 7375616808325007050, 9533380581694341054, 12865734730094919280, 90204381680091592, 13214670154856057272, 0, 0, 0, 0, 0, 0, 0, 0, 
			13434864727106532188, 2740717897632605150, 500208844617005708, 9149520903991927188, 12108611978795476170, 532772026695319424, 6015231548642250800, 1597952489800842154, 0, 0, 0, 0, 0, 0, 0, 0, 
			8064728095292593200, 8751624525923985938, 8454994619192545612, 9401795421094763294, 11006597023240581020, 8929880101355350294, 10898683490120096402, 2503482871029603466, 0, 0, 0, 0, 0, 0, 0, 0, 
			8688593299454969700, 4745382974813725692, 14713663033765832928, 14691323625914904334, 1183925369615376470, 1607330906151391444, 10977525955529393394, 5026182556072277570, 0, 0, 0, 0, 0, 0, 0, 0, 
			4552081536705130104, 17536078889597345636, 18382275111665075668, 10526590019470424770, 16526288719004847814, 10489562342107869380, 8738667137346416186, 14004971441620346428, 0, 0, 0, 0, 0, 0, 0, 0, 
			893073461423457380, 17683758848367226490, 16527097393569827420, 2735142674099284328, 9662802877124375424, 8321713552188327638, 8173669471044320106, 17793811270367016646, 0, 0, 0, 0, 0, 0, 0, 0, 
			6469010582208754026, 385263916836220764, 13997178071016099374, 6493273471255733094, 16398223291507912746, 12982011291321345124, 8398222169031995414, 12525029543551683222, 0, 0, 0, 0, 0, 0, 0, 0, 
			3838106435186607694, 16363275646207100230, 8157924686814188156, 10345999663263833660, 5885189947705602570, 11295261360414968882, 5944773567884435270, 3462668301945089422, 0, 0, 0, 0, 0, 0, 0, 0

	};


	
		private static ulong[] m_aulongHashCodesB =
		{

			16164111449390318276, 11419626980698143882, 3217985813656852606, 11925939290598446094, 16807230890854361004, 8132383134553493882, 16234001359038311548, 2222980806129073348, 0, 0, 0, 0, 0, 0, 0, 0, 
			12147126317193968708, 12662676227780305028, 7659016084700499920, 15919405972837025858, 5336156159565083352, 8423454768724593766, 2169585031632404044, 14142541111985433560, 0, 0, 0, 0, 0, 0, 0, 0, 
			2583011259453287228, 11286844808399943576, 8374353354055572742, 6722194691202237510, 3911546955319814036, 14360802384881332098, 6382525139320483186, 11397912141720563588, 0, 0, 0, 0, 0, 0, 0, 0, 
			14899448643725947014, 10897806443353667966, 14543834309523647952, 1343268705450754474, 12872137863462285308, 14161292543141927346, 12095639110668341110, 2910582744648050790, 0, 0, 0, 0, 0, 0, 0, 0, 
			5564895272546551192, 13816528074761504572, 4578164982259605850, 12865709233171828210, 14856112534707616532, 17141448801886020236, 6326927501705036350, 13940937044014384492, 0, 0, 0, 0, 0, 0, 0, 0, 
			11694505150302226348, 7921763992326395500, 7697700509538371894, 4534448629453279352, 2845043025763917274, 12394706142921790328, 9305303698502041320, 6745192885713086760, 0, 0, 0, 0, 0, 0, 0, 0, 
			12213175712255584760, 6656715557600338032, 11048561003910172554, 11110761397977851390, 12939332314972678396, 15198141740616770612, 11040779257252314990, 17381604467550285786, 0, 0, 0, 0, 0, 0, 0, 0, 
			4770697911055951336, 8757222608347024348, 1816873549623978120, 5326478122178533130, 1087289619159340200, 11855682151452920014, 7511779647440295244, 18318385218204224596, 0, 0, 0, 0, 0, 0, 0, 0,

			9487486157735094776, 14124570221350054228, 3680301562690119350, 7375616808325007050, 9533380581694341054, 12865734730094919280, 90204381680091592, 13214670154856057272, 0, 0, 0, 0, 0, 0, 0, 0, 
			13434864727106532188, 2740717897632605150, 500208844617005708, 9149520903991927188, 12108611978795476170, 532772026695319424, 6015231548642250800, 1597952489800842154, 0, 0, 0, 0, 0, 0, 0, 0, 
			8064728095292593200, 8751624525923985938, 8454994619192545612, 9401795421094763294, 11006597023240581020, 8929880101355350294, 10898683490120096402, 2503482871029603466, 0, 0, 0, 0, 0, 0, 0, 0, 
			8688593299454969700, 4745382974813725692, 14713663033765832928, 14691323625914904334, 1183925369615376470, 1607330906151391444, 10977525955529393394, 5026182556072277570, 0, 0, 0, 0, 0, 0, 0, 0, 
			4552081536705130104, 17536078889597345636, 18382275111665075668, 10526590019470424770, 16526288719004847814, 10489562342107869380, 8738667137346416186, 14004971441620346428, 0, 0, 0, 0, 0, 0, 0, 0, 
			893073461423457380, 17683758848367226490, 16527097393569827420, 2735142674099284328, 9662802877124375424, 8321713552188327638, 8173669471044320106, 17793811270367016646, 0, 0, 0, 0, 0, 0, 0, 0, 
			6469010582208754026, 385263916836220764, 13997178071016099374, 6493273471255733094, 16398223291507912746, 12982011291321345124, 8398222169031995414, 12525029543551683222, 0, 0, 0, 0, 0, 0, 0, 0, 
			3838106435186607694, 16363275646207100230, 8157924686814188156, 10345999663263833660, 5885189947705602570, 11295261360414968882, 5944773567884435270, 3462668301945089422, 0, 0, 0, 0, 0, 0, 0, 0, 

			3344936817192064422, 17401255372786163664, 3872772219482588148, 6137944081860966718, 3055734278902581824, 6945616616493087180, 18336212114342542160, 11923731121064839160, 0, 0, 0, 0, 0, 0, 0, 0, 
			4519098124918913706, 12117983363740902858, 7493560463396383966, 7147016527897967860, 5792910241466836596, 9724127137522948202, 6243118658839786780, 13885013441783436160, 0, 0, 0, 0, 0, 0, 0, 0, 
			4778609824380132206, 7011974445843263536, 6359370794641180748, 1665806381701613704, 7205507689655680604, 1227265249673702986, 3466313199543695154, 4223256977058918776, 0, 0, 0, 0, 0, 0, 0, 0, 
			15647860166391471038, 17143997206320015422, 18151665473222025196, 1209194083007403446, 8501083085299244810, 7713214028065421518, 15584711205387884816, 8607440584317730526, 0, 0, 0, 0, 0, 0, 0, 0, 
			16877935960819523498, 152479391901382770, 6682814327425431328, 3214828881490714820, 16937312275420067744, 13348490641085181504, 17803472016395178612, 6008548173903631042, 0, 0, 0, 0, 0, 0, 0, 0, 
			2306524264243502384, 3917445192178345188, 13323860474076086898, 1509493364220519758, 297939423860401882, 11773351517274655728, 6394920637879756110, 745618706588083402, 0, 0, 0, 0, 0, 0, 0, 0, 
			12425172210749952908, 1799385813435961628, 1183216649081491400, 9846358368954191780, 9547455301444961018, 8672793385275941226, 7290761809530633956, 765697254636148538, 0, 0, 0, 0, 0, 0, 0, 0, 
			16744140777532759624, 7512057434271677736, 10329939830924301418, 6915763866881108846, 15537502923271363082, 13842827890401801300, 13275445886735766078, 12396036464926460714, 0, 0, 0, 0, 0, 0, 0, 0, 

			1388206476602946332, 12604574175452993446, 8789111346873611468, 12509962012664031358, 2850409377252911622, 7947066416550965116, 3894409182713062620, 9108449337907075364, 0, 0, 0, 0, 0, 0, 0, 0, 
			10864638592470718524, 162719520516691236, 16957343228882379696, 14333748128682875422, 8622737960702205888, 4196169684417923184, 16760440721733045048, 16644990216076477868, 0, 0, 0, 0, 0, 0, 0, 0, 
			2484296943318739496, 15758064161420148116, 1823742412779931420, 13371718722184545162, 17674727640378858442, 18263782288417572360, 15318000466827519830, 11032596358787439946, 0, 0, 0, 0, 0, 0, 0, 0, 
			245840885151265736, 11728243866590838336, 6918118154900648708, 688765597643637744, 2377264675294192380, 13455269893442642120, 17850438961445686804, 1647207715815469688, 0, 0, 0, 0, 0, 0, 0, 0, 
			13733325228269359148, 2419332685934222516, 1207884240307078588, 14922888442592148292, 3458463330032783658, 7311935566668900388, 8970422960993277058, 8658599938099139622, 0, 0, 0, 0, 0, 0, 0, 0, 
			3054230502498618394, 12397960654450837472, 4872978039965947488, 12319733408774079494, 4488893741487824520, 5864077424484462482, 14708166006776717536, 13481247054196810926, 0, 0, 0, 0, 0, 0, 0, 0, 
			13065572577010239946, 3717179871896849274, 9470609289005981402, 7243170530067618406, 7702391841130663460, 16899418129538396328, 8648599374172182154, 15345423296027576404, 0, 0, 0, 0, 0, 0, 0, 0, 
			16017417564740220342, 14240555326155257928, 3224164359748396308, 14599131993280338370, 14173933314009159734, 9255057131345148678, 15254209989920391856, 13513619034292722414, 0, 0, 0, 0, 0, 0, 0, 0, 

			11960803740756832924, 14990660218859227290, 16288381560637520820, 2824879557307266218, 15183388117525220182, 1503590481965655042, 2209006097086652012, 4446252414168005800, 0, 0, 0, 0, 0, 0, 0, 0, 
			16627819364469247264, 2823247940770448108, 1489334515496216442, 3344555996350009396, 15393380973037338750, 6660139428992074438, 18069099554953020570, 17021260773280033596, 0, 0, 0, 0, 0, 0, 0, 0, 
			16424468978589491124, 12155690854037219092, 647912243374668548, 5517684647854983110, 2088246732055896240, 9056460280224703648, 17763397553263983140, 4830537618690397268, 0, 0, 0, 0, 0, 0, 0, 0, 
			17980888931579611550, 11134577441628307144, 15031757321199757096, 5567343718582756226, 15424318866853701712, 4893622921252694744, 4442863504296324750, 17946061138965074786, 0, 0, 0, 0, 0, 0, 0, 0, 
			4907239486881513522, 12056193894740891242, 11225481049109788580, 13899030677294564950, 5433617801164976038, 11525293649402579286, 17497955483299454350, 14692811270157588404, 0, 0, 0, 0, 0, 0, 0, 0, 
			9705089884582494798, 7259847420451718516, 8221357299467336550, 6548382687886189258, 11634337934724001780, 16428270785335272646, 17328373334178607072, 4833306833697490194, 0, 0, 0, 0, 0, 0, 0, 0, 
			15237347939434069096, 11624782695541192564, 17753791507520697468, 9378923982208539298, 16766949790996661768, 11984010350781213032, 4661576775331958580, 5912477841887156832, 0, 0, 0, 0, 0, 0, 0, 0, 
			1618399316511475318, 4797824379757225494, 9769827708287636890, 9978286463820157612, 17654605667685993402, 2220029364424753414, 7712628500036896260, 601977354988185498, 0, 0, 0, 0, 0, 0, 0, 0, 

			16198045497286566170, 15066518817651085512, 11674572506859055770, 7782756029441895324, 18101358491627647688, 6817607294387684190, 12900583637825338708, 11782521172850240680, 0, 0, 0, 0, 0, 0, 0, 0, 
			10876591988429144744, 8118705223050341604, 8847485636800003558, 17626202140096324018, 1265330542575019934, 7791948755286187134, 5904245549665420388, 15983459163060770168, 0, 0, 0, 0, 0, 0, 0, 0, 
			10599896774180588702, 5028303617488669722, 823371139033120566, 18163081935239432698, 10894853658992277032, 265569971633279628, 13360476310507423768, 16674172752312285190, 0, 0, 0, 0, 0, 0, 0, 0, 
			6204552001601576094, 12665639170158307730, 9677053844687245296, 715172232508078580, 11305249860831420962, 14486990784187916142, 7424916963188750484, 12958719887580342884, 0, 0, 0, 0, 0, 0, 0, 0, 
			18133637841071954684, 169869480430118332, 15943973537935101956, 16352724000820828736, 13244631872682564440, 2352712817505352924, 1896037200654681584, 12715735085130484460, 0, 0, 0, 0, 0, 0, 0, 0, 
			6487554510384000746, 881525408458183072, 7210548449120267868, 1398477378895203516, 10356496154026974762, 4396440639342169366, 6425232113267501650, 7522081727259491122, 0, 0, 0, 0, 0, 0, 0, 0, 
			3053463061419457926, 16212486860888469692, 15701156741900881596, 6154506516404304248, 8407827639560824862, 3965224356486437650, 8364280396468769218, 4493014910987650996, 0, 0, 0, 0, 0, 0, 0, 0, 
			14833773787325157452, 8208885737841763058, 12547545232467850670, 17067552817000416036, 11810455630983138800, 15766617408063377366, 8370205410411106274, 3160859810804582384, 0, 0, 0, 0, 0, 0, 0, 0, 

			10462599958619452926, 9590774916705603800, 4715682666706228304, 17353170092904189052, 13218976393853551352, 18426199526952577922, 2537916211726828882, 4059388623729016168, 0, 0, 0, 0, 0, 0, 0, 0, 
			7016989038808194238, 3550629857938950998, 9406326415411671662, 8817703211919315350, 9421681572500188900, 1513687319508271546, 3281414890847066886, 10878665241293195498, 0, 0, 0, 0, 0, 0, 0, 0, 
			17906835325985481218, 9804850597546979672, 10198234208526790454, 6286900586539669172, 6300209080211638992, 12772396456848845582, 10147596510906151826, 15270665258762884380, 0, 0, 0, 0, 0, 0, 0, 0, 
			3885985236056332098, 3821655003481266838, 906111883223352318, 9575304355208091150, 7853117846141967704, 10436402738964682492, 2399677004377746004, 2330187564018793040, 0, 0, 0, 0, 0, 0, 0, 0, 
			5092216094589542912, 8990305876690967686, 17454800020768591530, 6601523162001835412, 9162744767253837856, 15363365894524788038, 11692135621170375500, 8963449335441989268, 0, 0, 0, 0, 0, 0, 0, 0, 
			12735775156117007562, 2481312222658142886, 8445034828652654222, 5251043379906178128, 4821441965881279262, 10311436906228803156, 17778827883096942996, 17686970880736581900, 0, 0, 0, 0, 0, 0, 0, 0, 
			8336382523324132006, 16255104434813394774, 3913556288757961778, 171521669097497030, 584704248724122980, 4714428131092498046, 2229850204507612068, 14650188408228485402, 0, 0, 0, 0, 0, 0, 0, 0, 
			8021228613930264046, 2449431685254533530, 5261855366043898568, 3780490088037841778, 1646179932179754454, 7601402561819458914, 16918816041532370436, 3014964941227474472, 0, 0, 0, 0, 0, 0, 0, 0, 

			18223988674063759430, 3065727362606402448, 2852017506776277202, 6923241868541995068, 2297334295715853306, 17809212399164824898, 2922280118173986138, 17378007342082060362, 0, 0, 0, 0, 0, 0, 0, 0, 
			3320755042184102914, 724836288104314222, 11077774764964415062, 4016344871879019602, 1117147010581946026, 11840300856067310662, 6135046714864846188, 1427419194335940272, 0, 0, 0, 0, 0, 0, 0, 0, 
			1683767117336272824, 11318966227185947890, 346325405127319148, 13590720889076300244, 5258571877593294612, 3023081284428176814, 9633995897634344226, 8563785085560427834, 0, 0, 0, 0, 0, 0, 0, 0, 
			10639846026616021106, 16913467334468387362, 9625362733124106984, 4921556863397514232, 8806455934410818158, 15603235995724695602, 14529333511805631792, 11992149592614640978, 0, 0, 0, 0, 0, 0, 0, 0, 
			1118114318139987572, 15881120350659289468, 9932369911372744808, 1263107432744127310, 10495115382784571424, 10394179632060235688, 1072078954232623542, 8001379085089345252, 0, 0, 0, 0, 0, 0, 0, 0, 
			14571153690363450594, 18080009409451474376, 10859609056686907842, 16694974174616433532, 15943045085229456642, 6657752632003558522, 14187144686631535720, 12825088730625920334, 0, 0, 0, 0, 0, 0, 0, 0, 
			9423838313605508164, 5851573980567836476, 17437735250958123006, 1612822398473347816, 13979849410623282742, 14083899494126822390, 8076136678948908538, 8316372784867549388, 0, 0, 0, 0, 0, 0, 0, 0, 
			10455716791673477574, 3682794777767255526, 10958801983034516756, 12729551741726962170, 13129688738319188944, 15962029641640367996, 14258323761856670180, 5509092894363686516, 0, 0, 0, 0, 0, 0, 0, 0, 

			10068053600909066890, 13799171697315485676, 9739365072488327254, 11874697635848993798, 7801735642456237648, 18241918703131716080, 10248505701661230624, 7447117981548911460, 0, 0, 0, 0, 0, 0, 0, 0, 
			12651890771728175436, 16601918969050281610, 17082820184183526068, 14650797215031060090, 12478629344555555540, 13129641151611251812, 11252148081318951742, 173269718981918134, 0, 0, 0, 0, 0, 0, 0, 0, 
			11482475308543774572, 17888456028049406822, 1619799392005881976, 15502974029270414676, 17056811981845864078, 17237161170146515540, 9521787808840460864, 3164765276127555282, 0, 0, 0, 0, 0, 0, 0, 0, 
			883590126892036114, 8069981280346567918, 9017313689349954384, 2522394388160319414, 1671648926279625174, 7195721485905770262, 14536203656731610288, 10514755715993673278, 0, 0, 0, 0, 0, 0, 0, 0, 
			1941273072697034344, 18025671786291583082, 6783223017470087266, 1355951601139888354, 982393362466389638, 4943555246134846860, 16839243796718438870, 16227265772712192788, 0, 0, 0, 0, 0, 0, 0, 0, 
			744326921405722688, 980444972375847262, 5928409892568210270, 14868318205222754874, 15387288710406050694, 9590804986818398322, 15868571213089823552, 14387935302503020102, 0, 0, 0, 0, 0, 0, 0, 0, 
			6372687002074867584, 1108351406833023006, 11154440976426839074, 2069720140691574998, 17466306166046395422, 17501951172993198334, 18297197273766008716, 9214628855025347984, 0, 0, 0, 0, 0, 0, 0, 0, 
			11809026131879737050, 2432819917653656884, 4138046899647222852, 17404266352926865602, 961386131944984904, 13188951156669255926, 2119544031616778080, 11433384966034940488, 0, 0, 0, 0, 0, 0, 0, 0, 

			8322112754799500742, 7225642572412515128, 16434870717972331498, 18129098069361896392, 7535505947618204358, 7008835965154161184, 18149635609825984112, 14629226367319797530, 0, 0, 0, 0, 0, 0, 0, 0, 
			5413888737599345958, 6539045591447072830, 14658852713812994918, 3675839463133400426, 13040374761001590512, 3942369572321758478, 16720389394336408220, 6988555750320782744, 0, 0, 0, 0, 0, 0, 0, 0, 
			12117245228928768876, 10381468422342671066, 9604107129766883004, 11743111119337055194, 14597581450423504332, 14483278801542348128, 1283210232357942928, 1859944239777366358, 0, 0, 0, 0, 0, 0, 0, 0, 
			16672359311042229516, 219242288836095086, 11408373454018974092, 2271906838757922212, 17700030838712093036, 15237144689927921496, 17133762144956998970, 5831743846966709716, 0, 0, 0, 0, 0, 0, 0, 0, 
			743087363054682110, 18419051819058372604, 4356795774558063724, 14700385272851312916, 12039882048416392630, 16196474819539037612, 11258733781964864974, 4832651594839572504, 0, 0, 0, 0, 0, 0, 0, 0, 
			3778552368018812756, 978098358104925228, 546171797364455180, 7703637302521788278, 14067005739089945594, 555784113415420132, 2491530014219976474, 6323263865325055206, 0, 0, 0, 0, 0, 0, 0, 0, 
			17110382321811261534, 5360536045565975116, 5008044277141369982, 14864038932044773816, 8796738194901524976, 4179121256977483030, 15457554482660151430, 18152534996168928702, 0, 0, 0, 0, 0, 0, 0, 0, 
			13839173849530016616, 2393950385219159252, 6214331500205344866, 2072128787709894824, 17098862191251694284, 11646715965269190174, 13452066485371323398, 9451166966822417524, 0, 0, 0, 0, 0, 0, 0, 0, 

			10495042241935330410, 2601606175441845348, 10367993686308191224, 10164838763319879460, 1521772675380525588, 4398341780718700120, 1438329793137006484, 18335358809734198016, 0, 0, 0, 0, 0, 0, 0, 0, 
			9093200633068932274, 17193590326275932878, 5314402126269244472, 17868314474924842950, 12318254144001124286, 10341321453020809156, 16739921964800787266, 16729828975924719674, 0, 0, 0, 0, 0, 0, 0, 0, 
			962448725944479930, 18164082327507296586, 11791875157165937846, 9927655835267422072, 3958585910643133700, 10139761499630696038, 2612874156317429702, 7515781022277638516, 0, 0, 0, 0, 0, 0, 0, 0, 
			17990136961915045006, 2399669595651317836, 4949006358503682642, 17261961305020330214, 17617114463836888820, 5992112515661624496, 13661938035773928480, 7969512928110374624, 0, 0, 0, 0, 0, 0, 0, 0, 
			13748307318991879006, 16671203560323775860, 3366045570271433048, 5178313569890927228, 9906544038235355194, 17236418288356601574, 4363823105989992508, 13452548650393591772, 0, 0, 0, 0, 0, 0, 0, 0, 
			15853925466626380190, 14335641328221141672, 11035692330437480184, 16553064582327885182, 7327486438620608978, 8751297039553502920, 11776442246661461690, 16341912906657879792, 0, 0, 0, 0, 0, 0, 0, 0, 
			3821937136091376064, 2065517003299732356, 5973897556780577726, 2599997796122445954, 11483806333275390578, 11386227819947500748, 1148978756265490312, 15372530556150395002, 0, 0, 0, 0, 0, 0, 0, 0, 
			7701127672722700530, 2456437275545042398, 1788841129749838418, 9034852914631467322, 7205281975570448970, 6927577836091814226, 11319370591320447482, 13834196677911322920, 0, 0, 0, 0, 0, 0, 0, 0, 

			17388653037478843658, 11557135153390448590, 9859206372499629422, 16624487750664043566, 7106630031987165560, 3910154057094059388, 12894141377048351622, 13540976065827261862, 0, 0, 0, 0, 0, 0, 0, 0, 
			3573688034213356290, 1527128316864602874, 17110669282237584016, 18056164662192764348, 17141877818507296388, 4965628949440231340, 18298353002015094966, 16887546230194214712, 0, 0, 0, 0, 0, 0, 0, 0, 
			2840567267229847794, 2971880294845069118, 7040298230129772354, 7684328556499053144, 11932924059990722686, 10523335865074583706, 14760279723054836054, 156347100199929722, 0, 0, 0, 0, 0, 0, 0, 0, 
			8241080479915107916, 9236586761717703078, 9286931486468124070, 14280678413949263798, 4287105055708683248, 8061420135730580830, 6406353852029708568, 17687614917818022532, 0, 0, 0, 0, 0, 0, 0, 0, 
			837857564621685516, 15807538121242558212, 5467677016347662774, 6510642643446067836, 17953722952944028036, 3477592319808755624, 18375871809213248470, 16721777939452724410, 0, 0, 0, 0, 0, 0, 0, 0, 
			316235633896686928, 3786798668263310446, 15384207778861953472, 1908507186407541218, 16940806511038869794, 18419719690588134352, 5456794551001800152, 14317086327631429430, 0, 0, 0, 0, 0, 0, 0, 0, 
			8902548288816792476, 7535294223235741036, 16023588832029554088, 187635573527500196, 15022709884042392764, 9514239531872336028, 2986415377146285540, 12339248604114694174, 0, 0, 0, 0, 0, 0, 0, 0, 
			10102939798094035212, 17200596260016495288, 6346111505475475434, 1042966345465018442, 9085504805684424870, 17753811533601666020, 4771683997878629738, 16820290063667914472, 0, 0, 0, 0, 0, 0, 0, 0, 

			12546256788429414614, 7346590159090898872, 1910645845191885626, 7613456991998864408, 1257300629547237890, 15982970140982851124, 18065977918562117988, 13354618790967023204, 0, 0, 0, 0, 0, 0, 0, 0, 
			7862542064937412426, 8640504691416745384, 11132913189808230050, 6883576888016815548, 5895275992186628152, 13407605161039092976, 16613750691006366182, 9257545216548539448, 0, 0, 0, 0, 0, 0, 0, 0, 
			16031602835462559762, 12174142934909439442, 17729850319316984376, 7021705261165517812, 10765314813941717070, 14316450804107691086, 16975404262333382076, 12095962101009375446, 0, 0, 0, 0, 0, 0, 0, 0, 
			5434804966314244320, 10477307858349194114, 15519704187775219932, 2309022557315340600, 5558053865366496958, 8363780747429658572, 9761671972773884808, 8776585492341382752, 0, 0, 0, 0, 0, 0, 0, 0, 
			7702142152139308852, 13982852161346350606, 15794392850095949078, 3072201955657152758, 12435133696824789186, 5155623077663366592, 3840470406078852464, 15546035504034243142, 0, 0, 0, 0, 0, 0, 0, 0, 
			2153672793673846158, 7041908033609735608, 15407705149790403162, 16496591524907421450, 10558048989957822634, 15338953791704782694, 1402407589169538244, 2098453738245165024, 0, 0, 0, 0, 0, 0, 0, 0, 
			5615827304220133966, 12409142197339343588, 4767223267309505778, 17620047505688233498, 2790610284495220908, 588320950435257288, 11202678572098892374, 1273054796030972944, 0, 0, 0, 0, 0, 0, 0, 0, 
			7895845664058799472, 8611949344282249520, 1116144909379674922, 12332943432442630428, 2901918370502331920, 14402401161379450964, 15569887859930327822, 9367848067952692314, 0, 0, 0, 0, 0, 0, 0, 0, 

			12815326686472519484, 5308181965105809754, 5164919086280637590, 8461387537298351672, 2662446597911936862, 7487674107073322950, 8705932712288014476, 14674061861435386334, 0, 0, 0, 0, 0, 0, 0, 0, 
			5866898558452488668, 14436135406284140414, 4916208669931043272, 13860978617199743472, 11759249471220983190, 14582570900866408460, 17993561152574328192, 18360075976607102910, 0, 0, 0, 0, 0, 0, 0, 0, 
			16927975685139029548, 13860915769745715402, 18057511982608164880, 14145454402284114474, 14846463133546700078, 17049882522642407632, 6554014740719358680, 16390374196251235456, 0, 0, 0, 0, 0, 0, 0, 0, 
			4610142609092565864, 13846625406451411828, 4675043300638850448, 16956667491188383846, 13854169207705695788, 5432284267464161364, 4114478815145405460, 18210450856010932972, 0, 0, 0, 0, 0, 0, 0, 0, 
			4097805779587791624, 17439898375771120804, 7821290855422958278, 7465687259897330378, 6217875029049333378, 4528270037247371610, 18335148490022473244, 5979548621488877694, 0, 0, 0, 0, 0, 0, 0, 0, 
			5565462408955299854, 17513820594441886616, 8059175870235130430, 12772173059196268520, 17858233329294182226, 5169737541088808380, 14119324954798424146, 8331620850412589616, 0, 0, 0, 0, 0, 0, 0, 0, 
			5849093360039291666, 13191819278277878280, 3566093324279633994, 15434043348652268126, 16564904576723576666, 8896563372544975064, 900501349286044254, 1835865508081663162, 0, 0, 0, 0, 0, 0, 0, 0, 
			8149796299673973868, 18192459421073970660, 13933898763577119544, 4919137995194581108, 3939666128435692462, 4587419056913994656, 16310497896638908144, 15165612748254508654, 0, 0, 0, 0, 0, 0, 0, 0, 

			12366868093159904624, 7071520018226250700, 13746598835393570586, 4056986500812381822, 2508284103695684746, 6136693039834339942, 17435856759099910106, 10632599001342539102, 0, 0, 0, 0, 0, 0, 0, 0, 
			11482069868457939428, 514038740218592392, 12910615018616371894, 5104883016668304598, 6590881878555721176, 9810678521111707240, 17500113387849201650, 244857272548357748, 0, 0, 0, 0, 0, 0, 0, 0, 
			10013573926248506846, 11393973100561011518, 5995943575768863286, 849207472151222556, 11775213702508580226, 9515175945957788830, 10222338128858799208, 17817351815007175904, 0, 0, 0, 0, 0, 0, 0, 0, 
			2928231783453783960, 6623179149250691880, 12613575558639053322, 5852086188165532564, 13406127313102857474, 13113184387886830880, 5042015534591917864, 8330511889702720014, 0, 0, 0, 0, 0, 0, 0, 0, 
			13814624480221141648, 3707383914834924992, 10174021227196133278, 832893490561721676, 13219118853260988798, 17630249976327248250, 14198408671021479692, 17908765174969641832, 0, 0, 0, 0, 0, 0, 0, 0, 
			14574288419507035364, 18165563324048120612, 6377777309180521800, 237132834574475890, 1375199495711533578, 6145342344436314854, 8682252018951690100, 16282770128994842100, 0, 0, 0, 0, 0, 0, 0, 0, 
			11416208634796958950, 16231092672143551398, 746667730550664964, 16225209753543096664, 10949552583810700578, 16637675475371771328, 6236718955264179728, 8146465695421072112, 0, 0, 0, 0, 0, 0, 0, 0, 
			10758656707043074572, 4076542697265433868, 10831816128657615714, 15394725236662833850, 18120307938701317816, 1652996859802113722, 8988838764815750566, 795351071877884504, 0, 0, 0, 0, 0, 0, 0, 0, 

			17878332885672964256, 16395961803841195792, 707868595208393244, 13307774478803832746, 1327116449268315266, 9025073844776002672, 16720452952253915780, 14989933521962998760, 0, 0, 0, 0, 0, 0, 0, 0, 
			12006799496238147774, 14496648668261409114, 7311336330078810476, 17653504862401133978, 10344936442849947062, 5594959960650556686, 12849989987903973270, 17080542646738804964, 0, 0, 0, 0, 0, 0, 0, 0, 
			8165777324835923828, 8590302529124563812, 18061798752881017744, 17807648424890013306, 4366108772990137730, 5698200627028185684, 5223586336974252988, 6225425788532058984, 0, 0, 0, 0, 0, 0, 0, 0, 
			15505334001111155972, 5503992139699058776, 14404643434200569322, 16755898552040317206, 11393096563007311330, 6170761638116643604, 9744387922668267206, 1026296539312930600, 0, 0, 0, 0, 0, 0, 0, 0, 
			11141545058220513362, 8145813248361897896, 10800645511383830534, 10102077514590306772, 12383825779911782458, 3976598833844332676, 17255663846652501552, 11578849120627219942, 0, 0, 0, 0, 0, 0, 0, 0, 
			2532424811164546202, 18064356285894269800, 5409673417863786502, 4309318727919902738, 3166037839758037720, 3970907044860029558, 16049534591075511026, 18402160992570704650, 0, 0, 0, 0, 0, 0, 0, 0, 
			3782292292005865524, 8863990959943741396, 13033749707467157726, 17532025814040036556, 163899639543454376, 18353067935968824972, 15725197237754938168, 9382923163885928194, 0, 0, 0, 0, 0, 0, 0, 0, 
			6433574609701471884, 16297142276229853870, 2908510606657886054, 7247395980194717016, 15630074183867346020, 8461644774752148246, 16064602700478823576, 17926923448347010736, 0, 0, 0, 0, 0, 0, 0, 0, 

			6557995217205458958, 3216546429887213718, 10981975557637945592, 13117948053612451546, 16462319544570117268, 14109089931958414830, 7784257433824872028, 12575758863506724218, 0, 0, 0, 0, 0, 0, 0, 0, 
			5452803369408346770, 17504272207519905704, 10076908662681196056, 12181556996310766954, 6618282532582206852, 886584768689976646, 5337735909196723884, 1518236921046637970, 0, 0, 0, 0, 0, 0, 0, 0, 
			15827119029725512510, 9082962233660957234, 1263297098503346738, 13875222574635967674, 16609127610647298318, 10435515111652777838, 18329661936892632940, 5331746027401435792, 0, 0, 0, 0, 0, 0, 0, 0, 
			1049717386564424156, 9246948175640910896, 17992694740464130014, 11919617026173496926, 942713142301085492, 16767582443534198792, 2343237112367443196, 7706490310447073566, 0, 0, 0, 0, 0, 0, 0, 0, 
			1180650458668525454, 110739167744257384, 15612783373802952686, 12368533738239614404, 4710529855387962032, 1491317575964475796, 7991609012807777138, 13223305147380179598, 0, 0, 0, 0, 0, 0, 0, 0, 
			9827852277825374356, 8971731418860897980, 5890489662268004190, 621233762326742028, 11437796629142146816, 14858882528073565038, 523346254803746784, 14883403326801949494, 0, 0, 0, 0, 0, 0, 0, 0, 
			10568557893264073862, 7767832610067314526, 1588172969737753022, 7365253622489937858, 3475562964612195378, 15378553259884894290, 10258544682946854394, 16471709323283427872, 0, 0, 0, 0, 0, 0, 0, 0, 
			7387401186393507380, 4836657810614330796, 15117989234145937886, 5053120470808326610, 3415221099905780174, 1032168018064794264, 13326555077905273864, 5458304681770616980, 0, 0, 0, 0, 0, 0, 0, 0, 

			17545613622841681746, 10501891328749148278, 9426908387088153308, 8877089434143743062, 13459885476225016672, 9185958386474511294, 5120516392545654832, 14165698063145622968, 0, 0, 0, 0, 0, 0, 0, 0, 
			6847708915845601312, 7355483455673498960, 16494535249479569034, 11705033033488649218, 18251350343559018236, 15065819270541461548, 11376452399259816238, 8593254708121809928, 0, 0, 0, 0, 0, 0, 0, 0, 
			3766479623975822972, 14086321667423203714, 8622476836776146302, 12842960888468376816, 4068737430762310318, 14133956764673292544, 9083206044346845834, 4011875571403032608, 0, 0, 0, 0, 0, 0, 0, 0, 
			15625060894836009252, 1889265324647982124, 3665329999209076784, 6312111210106831900, 5532502273248938888, 13425407484649116734, 17896713095005619428, 4834726832543450412, 0, 0, 0, 0, 0, 0, 0, 0, 
			5561303255605950664, 7127197816163928908, 2595006774291545308, 12652930689033263362, 3940050985010175540, 13567225257720373740, 10711626861993623774, 147177847809271834, 0, 0, 0, 0, 0, 0, 0, 0, 
			17477047963492222950, 8136956387404159526, 3117970724319799752, 12147741636872885940, 2242179716208357412, 2562319680788492322, 11061192320938775572, 7908171076188569374, 0, 0, 0, 0, 0, 0, 0, 0, 
			10498288624450659978, 12563302206478880838, 5730579894377095228, 16308430302931869696, 1831469209542535446, 17992566768689471744, 6394314967729364118, 9945922527443908708, 0, 0, 0, 0, 0, 0, 0, 0, 
			2383769403964594706, 7243572543467171602, 9673519885520955480, 10302479083779678424, 1222978968320988764, 14116760955714134862, 2778999516988478224, 272137612191235292, 0, 0, 0, 0, 0, 0, 0, 0, 

			18362019642220520632, 17755149605427691238, 8160413835264563194, 7132858826473086762, 1007724277759928980, 15743651996523805876, 16025805139638878002, 5161082153409826282, 0, 0, 0, 0, 0, 0, 0, 0, 
			4100462926474833894, 18208079740419987330, 12846472991818489784, 12978259235470649460, 103456753621245066, 4651193507658424492, 11390664131773545164, 1691469575270734918, 0, 0, 0, 0, 0, 0, 0, 0, 
			9801623276000129460, 15400126094246462240, 6962005964312803656, 2710151849400758610, 7163633941123730330, 1436113090146831650, 1214131491520122768, 8288602715461326300, 0, 0, 0, 0, 0, 0, 0, 0, 
			7209397833038329266, 783510774798573244, 17515929933458189902, 17163480899148848852, 379162074805962044, 10359452548550129722, 4904889499145281694, 1730782921886347280, 0, 0, 0, 0, 0, 0, 0, 0, 
			7733798654773319900, 12083689413807324462, 9733741507736632334, 8563518115659578648, 8234679590580718066, 12635745401699872526, 3515796062346602382, 10313807708542751484, 0, 0, 0, 0, 0, 0, 0, 0, 
			9590243228481784796, 18312820394031351710, 2268411402138529460, 4541508915905349356, 6640998182349241626, 17062855046952176728, 10862370304893891180, 7344870253133488396, 0, 0, 0, 0, 0, 0, 0, 0, 
			9839681346578731526, 16129457661828346648, 1010661346002988452, 8927068749858475488, 8947055826136189964, 8222255366307327972, 5068238261620947038, 16561976205883417194, 0, 0, 0, 0, 0, 0, 0, 0, 
			13876150851661739334, 883937720935685786, 2629899801469577772, 12749005373783752508, 7133681984040306688, 10631558025487873470, 2153981768149090976, 13580534170312191286, 0, 0, 0, 0, 0, 0, 0, 0, 

			8435020523903278100, 3899549808124225056, 11740181989979615358, 2041080558069095060, 15499985976758967078, 16351352178717716834, 3155488787503514122, 8918355425615710116, 0, 0, 0, 0, 0, 0, 0, 0, 
			1716338329987971662, 8634976736576939216, 1360184205345850660, 80685516177902610, 435671442675900540, 9096124201126564186, 15527634424542698474, 1804657981933081670, 0, 0, 0, 0, 0, 0, 0, 0, 
			1458585183149351304, 15930460019289889874, 9122907559677149454, 1384733279166374968, 3287866371596040874, 11433439859207289334, 16099084153461366154, 8353404166395274294, 0, 0, 0, 0, 0, 0, 0, 0, 
			7594431612145172426, 5678654864300847890, 2296316498868683128, 16117104527415964124, 14987129460127342310, 18303810239017957078, 18036186145600152580, 7580821818782221008, 0, 0, 0, 0, 0, 0, 0, 0, 
			8988132497386417792, 15400483954176547520, 5004883764012434498, 5703741608894025110, 5062492724851822130, 5749127852241007686, 14609076854938214498, 6028471000313416526, 0, 0, 0, 0, 0, 0, 0, 0, 
			5426572427479225114, 12831947132453655008, 2914874623825477326, 1547932765128748618, 10330657800124228258, 1245833917906384314, 9151243598656517166, 13970250372540654636, 0, 0, 0, 0, 0, 0, 0, 0, 
			15690282517834573640, 5604322317368605636, 16679931897902273436, 1796595831797282574, 8332875789471016014, 3728652341858720794, 7020228664937759766, 9750376307427285518, 0, 0, 0, 0, 0, 0, 0, 0, 
			1942847270524820678, 8134801327608615504, 4080113772526894578, 2491070703886044058, 13360655509619370760, 4179639504456877008, 2626178361387543956, 6727224916781954734, 0, 0, 0, 0, 0, 0, 0, 0, 

			697049003402709900, 7321409807090816720, 17901567487103664554, 8507828525102310766, 10433420987590654640, 12016764149121530488, 17308671610707428838, 14009049094914124466, 0, 0, 0, 0, 0, 0, 0, 0, 
			15287793111852817750, 8398193963619866050, 5008982554089882718, 6625760951806960864, 2995411598035499012, 17342320092550096848, 3741401159892176084, 1407742525582738534, 0, 0, 0, 0, 0, 0, 0, 0, 
			10643985204325275962, 12492660627384936138, 15023543365913601418, 11241491059163425242, 12412310737539243594, 7022196888866678986, 8902307296966089434, 10965251883966128392, 0, 0, 0, 0, 0, 0, 0, 0, 
			14244819358008232412, 3496444803019880812, 6547680326320028812, 9996928622696526138, 17550526766438310738, 15074498431219699226, 7550803613155793554, 16649414371022742478, 0, 0, 0, 0, 0, 0, 0, 0, 
			1986542532258149386, 1778303755541528356, 18115431151558693510, 5384847065516003948, 1859360829755063438, 2335426881333950402, 10041687238838600326, 10333940178308817956, 0, 0, 0, 0, 0, 0, 0, 0, 
			10457617226699114194, 1519501693245038512, 8294925956231854240, 4420657647900632912, 2947897131352196172, 14062527908476704318, 4059262799481613732, 333160343173988928, 0, 0, 0, 0, 0, 0, 0, 0, 
			11546802147115496736, 7396825621132614272, 15518522782322793380, 6721404768863368010, 11903292086227233898, 6658021771352009420, 14640054058612891042, 11140487344450186652, 0, 0, 0, 0, 0, 0, 0, 0, 
			7114792558576697934, 3387505862897350554, 15640531184607830958, 16616720283676109202, 9936727893764837680, 17947404418416194658, 13209421771296978272, 8112652134469098058, 0, 0, 0, 0, 0, 0, 0, 0, 

			5665404442519041296, 11652329987666154062, 13854588595341168890, 6514112100154166760, 3626875270923978286, 16038900008469934550, 2400067158618991236, 13603071526515112366, 0, 0, 0, 0, 0, 0, 0, 0, 
			1020499343493341262, 3415488412138256228, 4669837224676070028, 7705332113226008316, 852346498047127774, 9285589157583961426, 4120166983739494728, 12698067291240684258, 0, 0, 0, 0, 0, 0, 0, 0, 
			18229560719552215186, 2069589819650391054, 8147135925684561782, 7447996661810213310, 1815094731655449896, 11295999133625140404, 1208441532669388528, 2831842216804409250, 0, 0, 0, 0, 0, 0, 0, 0, 
			3373645269785229750, 8572181569484468984, 6168268300526695776, 10392300361129127386, 15135424525234907672, 7686261396165508762, 17132353351720071916, 13284530247892685780, 0, 0, 0, 0, 0, 0, 0, 0, 
			12247994756660140162, 1166050697516006116, 8821632965105408036, 1842802062817658228, 18075120208551426582, 2723586755659008986, 17863756796063009144, 8053261149661880062, 0, 0, 0, 0, 0, 0, 0, 0, 
			13253794882948269498, 9988608050061241120, 8742296581241379190, 12303890603744907326, 12204503846089050952, 14459801701612119276, 16597093992593754204, 97473686188079102, 0, 0, 0, 0, 0, 0, 0, 0, 
			6442228234539520012, 12979411897087179894, 14163305775019345300, 15275631168831220392, 10717209386685992858, 9704491539566463286, 3541499240924978424, 2441609699312500632, 0, 0, 0, 0, 0, 0, 0, 0, 
			7992470224703833816, 3213469385909055804, 12088361536403549074, 8993005965618334956, 10466394278834302270, 1659100440994349686, 735439209011868520, 1302011778386667484, 0, 0, 0, 0, 0, 0, 0, 0, 

			17377572500295275834, 6003140462065580108, 15064357806456510530, 8938545766682692900, 12044960507722261700, 6672931493094911108, 4205932370964761232, 3273263430766591282, 0, 0, 0, 0, 0, 0, 0, 0, 
			12954893346695653204, 4456581349884521276, 11964959556245653746, 14611741444683672234, 4319815233314161340, 6338505257809472084, 7079562779122952088, 1425555313942491660, 0, 0, 0, 0, 0, 0, 0, 0, 
			11732457201854548098, 16659192675455660258, 4625163344326626948, 14365425020564515972, 7923396323588240282, 14003714631671619558, 3973931139203065886, 1226939725772574054, 0, 0, 0, 0, 0, 0, 0, 0, 
			16573576071605566610, 15966251362696382904, 18210862833159108758, 1671653095605261336, 8871523210020380196, 7665034417058761088, 7873349992079541068, 8069141792002954272, 0, 0, 0, 0, 0, 0, 0, 0, 
			16644371083298261274, 4153219780130355226, 13159501946245857746, 4234841917868207438, 16456988767024439132, 769721632228695900, 17029164728979186056, 9587239647395780446, 0, 0, 0, 0, 0, 0, 0, 0, 
			5696695586663974828, 5973573164245466284, 2063961051660522344, 15839727411994695414, 199459669052927986, 14946005510656560718, 5533074920594268180, 6116357638203448478, 0, 0, 0, 0, 0, 0, 0, 0, 
			15159826749400631356, 13744751880460335086, 9026630115817166006, 7852659349782449736, 15748347900373409472, 10303683974714885240, 4934670569553498714, 5376778982387108370, 0, 0, 0, 0, 0, 0, 0, 0, 
			12015722847322421430, 9842844136790033124, 3894681422355049106, 18250672835590363806, 5806929370079168862, 15352553644500412078, 14654587642685911044, 18042649453071963336, 0, 0, 0, 0, 0, 0, 0, 0, 

			17946573602882554118, 13962910691463550668, 16603681017769630714, 14141697429650567752, 13670751367401967586, 1916656545840761708, 3927664540621357484, 14293693855662677964, 0, 0, 0, 0, 0, 0, 0, 0, 
			4714727513351594798, 2451581932705223666, 4381502341697200100, 4368425723358635250, 16984091860706930006, 10506107317147062878, 11955018622346451922, 8382705398529510864, 0, 0, 0, 0, 0, 0, 0, 0, 
			5267469662070717464, 15301853718377696130, 5222468855080464434, 1358335983519133394, 7051305686615951504, 17616396652300564706, 8134866340243791392, 5814958151369686802, 0, 0, 0, 0, 0, 0, 0, 0, 
			457785384807912768, 8217216080001079036, 5810600813959238594, 15991251238118112550, 5978035660977549408, 13177562916699893330, 2868137598350523944, 8991218831506932804, 0, 0, 0, 0, 0, 0, 0, 0, 
			5302773656371663436, 99095853610299912, 1788587076509008122, 15112254392804371782, 15295242803414544518, 1684514525904896578, 2470812776919717972, 7393397109069194014, 0, 0, 0, 0, 0, 0, 0, 0, 
			9286670733503693516, 12864308131921283858, 299574971472822716, 7704229009114953650, 14034285214502605382, 15746713050279214390, 15027030930736934586, 15949364634273287416, 0, 0, 0, 0, 0, 0, 0, 0, 
			16822520072905265460, 14848813016659555092, 14537935247989249588, 5373799921628301034, 15152638234304405174, 10734514395627169250, 13893775247432360360, 12593229840062092124, 0, 0, 0, 0, 0, 0, 0, 0, 
			17588233516394403022, 451967259535062642, 17787201662645497054, 6494717919564680886, 12284744786550852738, 14556766516337798076, 4508316373383323934, 3696268089422111322, 0, 0, 0, 0, 0, 0, 0, 0, 

			376856387213271802, 15606748958390861436, 5732467499142395644, 9581842342894809158, 536378430474277914, 15225357924859506034, 8069032853482777760, 7384081406293592336, 0, 0, 0, 0, 0, 0, 0, 0, 
			15225166930785196042, 1814803006099418416, 10923943020757249104, 16016724822513309850, 11851598054492819932, 6694173686584917496, 16294039626277543736, 12523690005290728416, 0, 0, 0, 0, 0, 0, 0, 0, 
			13754410116007817116, 6587525011057060358, 424818951823364514, 3516274216476325514, 16299747102147407044, 386260018674172502, 1181399325845063318, 8175942810166613660, 0, 0, 0, 0, 0, 0, 0, 0, 
			6444717557543992850, 7257905226454997080, 14737807439390237316, 7836126903521609200, 2869614908772334080, 8748198205844139340, 11145048314964365048, 14715331818239684454, 0, 0, 0, 0, 0, 0, 0, 0, 
			2175690806553480386, 13011197415931344278, 9751698169708401138, 5743097684795304526, 14407433447032538862, 14113563889617871046, 15735361926695798198, 5962319320571728278, 0, 0, 0, 0, 0, 0, 0, 0, 
			11337071994687828362, 11418784404017101314, 2203391709908825184, 1843267239672419600, 7076406494178840658, 11416911575529081870, 1937903514921520280, 10021566705031748660, 0, 0, 0, 0, 0, 0, 0, 0, 
			1293281435200205942, 8739888437745858676, 7678080003840364226, 385807219277634006, 1568351457825203838, 6816571066377938896, 4635963329449693942, 5210167904902542444, 0, 0, 0, 0, 0, 0, 0, 0, 
			7618592618489250390, 1459725527312655116, 7673205590265214388, 9454976843229183074, 4889830829399948388, 12496991763280251212, 2535557256724202966, 11994251123662957068, 0, 0, 0, 0, 0, 0, 0, 0, 

			9047374726642685298, 9236970123329802762, 16538397916652949686, 9412423927210351996, 17597353957404741724, 16819058554428634608, 1182306188088432788, 16679378206943874156, 0, 0, 0, 0, 0, 0, 0, 0, 
			11048997177922059402, 14461917155561994690, 8821188066289112540, 2569542586880334858, 13736757234172381344, 13044945776504547232, 7608552545217389344, 16924925724737344722, 0, 0, 0, 0, 0, 0, 0, 0, 
			13490273190041058056, 13544483681849785854, 13268030184260732328, 8341577007587616552, 11981385645784138840, 12739813663858401146, 15682750692183998074, 13741999556868179034, 0, 0, 0, 0, 0, 0, 0, 0, 
			7863061824753666954, 10711848567370886900, 1851928939872651412, 173994800101321724, 4955687640643085748, 9096840850576520668, 17009761012092243288, 7108951253016709586, 0, 0, 0, 0, 0, 0, 0, 0, 
			15432573436140201210, 9061544758606553434, 3304444937613904472, 16685609420141789022, 7277436274459389088, 4182216630949380800, 4900295465920426874, 7443051037428928618, 0, 0, 0, 0, 0, 0, 0, 0, 
			11273828603417989344, 2352469712881399772, 11673986160580734754, 15690864393370035402, 5478627578491943926, 10897796410971510558, 4704034473513099804, 13234864866507084236, 0, 0, 0, 0, 0, 0, 0, 0, 
			6134186279371533766, 5206306754534358172, 13007546367055059150, 13167085736304116432, 12275204124803464024, 4716013566410744270, 16677567026592534722, 4171098949464447236, 0, 0, 0, 0, 0, 0, 0, 0, 
			10802836935503779922, 701866167495747064, 3054889532304523998, 17059421217919118712, 10468886650443821178, 13075717577531753708, 16171956469496148926, 7507204263148125046, 0, 0, 0, 0, 0, 0, 0, 0, 

			535070851464515888, 11011262178080311678, 1056853323583859822, 14513411946322362968, 13722327066591950122, 12712625604069112286, 13223507269536054182, 11844153752562103110, 0, 0, 0, 0, 0, 0, 0, 0, 
			12390709658593153482, 12204554713087954972, 14349454703919723704, 1612715212521958476, 15757901246024590964, 1716193147451670270, 909852175890335094, 15370917412142066098, 0, 0, 0, 0, 0, 0, 0, 0, 
			1728933757882648298, 8448628683348615796, 12123255935135256628, 16244465656445562864, 795316636322912160, 12063200268377639260, 14915652542647832660, 2915580400020274394, 0, 0, 0, 0, 0, 0, 0, 0, 
			7078087096128525856, 2747084540107334592, 5924041513155809726, 5740860192226924074, 8493161838905553140, 164118427865744620, 639663497152624722, 2451739645492093062, 0, 0, 0, 0, 0, 0, 0, 0, 
			6870121342546334152, 1986759699792393934, 1697231316389591104, 12839372130162943498, 18051518219809926910, 16863229931647879576, 1870051230272811146, 8378939526766460510, 0, 0, 0, 0, 0, 0, 0, 0, 
			2576794903071643014, 13072327487576715388, 1526197592724647010, 12015074863258546570, 9107061268466920626, 10772499169423062352, 884252003474075916, 3622759036444231710, 0, 0, 0, 0, 0, 0, 0, 0, 
			7164634288339533838, 9997171336275716664, 14151337748627442430, 11389069039320883556, 4661903214707930728, 3105956753327505464, 6239063152221592958, 5893564249273485776, 0, 0, 0, 0, 0, 0, 0, 0, 
			5342486987090431266, 5836543708096937226, 1647527533801903614, 2004799178205711340, 17029458641467441136, 1487219028898936132, 17367531743422558152, 14720464409431075348, 0, 0, 0, 0, 0, 0, 0, 0, 

			1558077578039975344, 13860830786044768784, 10517244390486947730, 17022065221998100252, 10250628846810531174, 787267214724421270, 17282423542939038802, 10923040188982833060, 0, 0, 0, 0, 0, 0, 0, 0, 
			6711754163701036710, 17968693316859942366, 1952328545224446088, 9261204598374683750, 14304420986401391762, 15420740490330437076, 2448570425163893370, 12683640306206648310, 0, 0, 0, 0, 0, 0, 0, 0, 
			8330502810449932548, 15814648749565247974, 15915118991247025636, 8122364383198329608, 8330159730996266756, 12363411138832883944, 10413633595182886438, 11179696256598581212, 0, 0, 0, 0, 0, 0, 0, 0, 
			2237592972439708648, 2255194386978233350, 10839893033571845902, 15890845364239956164, 13408204945565476890, 5753825721379036740, 1939266150952902496, 1479244964221623522, 0, 0, 0, 0, 0, 0, 0, 0, 
			1346208858283752512, 13679470843319856972, 16440996502217024322, 17156633379667530144, 1191044343461553508, 4449344272173312734, 7582264404284676646, 6261346191105489334, 0, 0, 0, 0, 0, 0, 0, 0, 
			12196682178559230614, 11901276765965488964, 3291256350584031330, 18012161963281745454, 3778325114347582702, 15703696660180311860, 8529402902751379866, 2160345441878788930, 0, 0, 0, 0, 0, 0, 0, 0, 
			16442464919516802648, 1825045828428699142, 12469796883569673068, 6221478891926613422, 10268052443762121100, 13217119802337340486, 430524667900128926, 10339101214570329592, 0, 0, 0, 0, 0, 0, 0, 0, 
			17685628888905325398, 2392228307787908902, 3140581098169617940, 4497969095045074068, 6075935446294553584, 3039220642247904180, 7657406463893249544, 15139342789550444248, 0, 0, 0, 0, 0, 0, 0, 0, 

			865355807191259468, 6279126667529299844, 14383540414544334254, 7864355081158328224, 5328117748130550338, 496808088723362266, 9965408507556679224, 3124745750444298358, 0, 0, 0, 0, 0, 0, 0, 0, 
			7115899893391684798, 5171369147873141418, 4561894164142196798, 5880574106513400518, 8807526931934582038, 18304895138076465394, 14058555647262135616, 10477443914198132626, 0, 0, 0, 0, 0, 0, 0, 0, 
			11525605516087800140, 15199201062077445936, 3322608585540383280, 1458066964785818986, 6449518574670049000, 12042490317506771720, 9172651599754246990, 12691276999830592106, 0, 0, 0, 0, 0, 0, 0, 0, 
			13913342625004988374, 10123952130947414598, 7737824311586850344, 1659215962546204404, 15774776097797397116, 13800303307694108790, 1525288276994492676, 15432307423560251896, 0, 0, 0, 0, 0, 0, 0, 0, 
			12133271932643440672, 13602399628926601836, 13915390647036876360, 12752208412494523924, 14138578297288574142, 10230582548493278560, 16208109186136934426, 11242965770532956578, 0, 0, 0, 0, 0, 0, 0, 0, 
			17108761941570390008, 10799878794521875348, 8343579280620732208, 17495903773051558162, 15341670246306105332, 15237163227516792352, 13504056511348737166, 574519821556648610, 0, 0, 0, 0, 0, 0, 0, 0, 
			16250339875029676684, 3193012847170915432, 6061519854697965292, 11628816252577707618, 14987796622672231894, 6457556980216639346, 14586331542457865906, 6115976552797342500, 0, 0, 0, 0, 0, 0, 0, 0, 
			7654378081606602008, 5359484951795705046, 3195545882598988754, 9231510513697031068, 10293785431318356240, 8599862975129558302, 2241612777117998600, 6627940788786378806, 0, 0, 0, 0, 0, 0, 0, 0, 

			11248613652772964840, 9867562046520357430, 10762961564886105086, 17912360135266294252, 6137801022687168534, 7450294350237636330, 8673003316156722122, 1551584234406051084, 0, 0, 0, 0, 0, 0, 0, 0, 
			8879851239734444310, 3298086420824746388, 12290672110953044322, 4377310946238480948, 14124516079542267716, 18429377446360330148, 154925330222003822, 3253324007385666938, 0, 0, 0, 0, 0, 0, 0, 0, 
			3522617902310212192, 3823763627277939174, 13040344846727103428, 9365370363932440862, 2601093092202284894, 12306598068256060004, 6444051603838365636, 13435721984002998476, 0, 0, 0, 0, 0, 0, 0, 0, 
			11490927046042207184, 10213411068904417604, 16134197443524259318, 3570629337421124066, 10689627290620898206, 18286683842429065230, 15244151151964193454, 5640097913579118294, 0, 0, 0, 0, 0, 0, 0, 0, 
			9258384421522928408, 2649882614677790050, 9207855004198191824, 10336055121312686000, 9788236449784354374, 230929291847714332, 17082565069101918352, 9523970584533592504, 0, 0, 0, 0, 0, 0, 0, 0, 
			16810027511544030078, 4471254318550087450, 3780261039075246620, 7017687316345435632, 16067344076312222392, 12460256599674315226, 346174256802339310, 8184517372502489226, 0, 0, 0, 0, 0, 0, 0, 0, 
			11815712727279033294, 14164477658675063572, 3286619963997639364, 15137681719951228660, 5551080661963290624, 13193019507992621266, 5661196312708540864, 3812203635369484026, 0, 0, 0, 0, 0, 0, 0, 0, 
			14586928056061963040, 11572057666775746064, 12261080388853408614, 11530480955062890738, 5905715184619594950, 2108558540771919448, 1876310604511111936, 570757121617527854, 0, 0, 0, 0, 0, 0, 0, 0, 

			12574549755802785100, 16443082542517785584, 13660257824871647756, 10375864877109868060, 1283349257239643672, 10480357514724298848, 2102062019674942696, 989790992628661580, 0, 0, 0, 0, 0, 0, 0, 0, 
			14939652393423059292, 231455403060740746, 15392985165526237332, 5893899204362377590, 15008487300607378992, 11377605300049401144, 5493943625605771438, 15084802208311748772, 0, 0, 0, 0, 0, 0, 0, 0, 
			13081355929189939042, 7691848474250524724, 11623911448789886910, 13148064604868513030, 13163162833643235934, 11059634676581784930, 10285715861788859010, 1125679358816511802, 0, 0, 0, 0, 0, 0, 0, 0, 
			866560257097973228, 16327211911960170402, 753015219923774866, 16020360496210947446, 17559545064826196778, 17632211976902572378, 6001120892410884796, 13021499343000033068, 0, 0, 0, 0, 0, 0, 0, 0, 
			14651886035150488788, 17043919162345589338, 9418378763215436714, 11515131931290159184, 12041514478951658432, 604370375018902232, 10433813284759390520, 11386371170357585286, 0, 0, 0, 0, 0, 0, 0, 0, 
			13804241403229057346, 6029395824271849256, 12328732560774604488, 8657823677826162866, 5082818429977555956, 13788688739026655074, 15389883126715731282, 13188842905087081942, 0, 0, 0, 0, 0, 0, 0, 0, 
			6004212527046359542, 151682343326847282, 13121484094528126202, 9026882584342862000, 10907593889918158360, 7824692746031570184, 9231422046861836774, 13514074272773039012, 0, 0, 0, 0, 0, 0, 0, 0, 
			3100982014055121238, 14757592218523752370, 9998502826155052952, 10867335607806085638, 236251896405141026, 4633802842890611318, 12290216048587548728, 6343997214846151486, 0, 0, 0, 0, 0, 0, 0, 0, 

			3591490871264005846, 11477029166294441118, 17207443962968935894, 455488295483641806, 4330807740248377940, 6552962174459494146, 8378431705090728210, 14164578135339702830, 0, 0, 0, 0, 0, 0, 0, 0, 
			10465581913979867856, 7923717876592009806, 4111855899994986858, 8853560567149517396, 16585393081409031800, 1554706319225285626, 8114008830732912492, 3371940990714217908, 0, 0, 0, 0, 0, 0, 0, 0, 
			2521660644058944506, 2948542054564828660, 14153534865037268920, 13194226332749162618, 16671450371134523938, 6771401495000981258, 8408199538811145490, 13624210701813922222, 0, 0, 0, 0, 0, 0, 0, 0, 
			15107869283949129708, 10537348939668604012, 112940723069126890, 15819144237224908626, 2892066878009356948, 6893057789012355990, 14974156480460794972, 2664014192529203210, 0, 0, 0, 0, 0, 0, 0, 0, 
			5340980247011934632, 17509454861226944078, 11940453918049674332, 18220748372254471362, 16824233280937172050, 610012363404793194, 12515668202642270334, 1659308426616672788, 0, 0, 0, 0, 0, 0, 0, 0, 
			7079568573131857870, 17463207697321781860, 10673273525780713024, 4208978758881610544, 8283083076309309622, 2755991034385475388, 13199066122313278856, 15647147990663949628, 0, 0, 0, 0, 0, 0, 0, 0, 
			2032444034691397282, 531489711211049572, 3938448369147987384, 13444972959689344786, 6257518099028975776, 2796815787615533756, 13700228577489310564, 3160185983542576612, 0, 0, 0, 0, 0, 0, 0, 0, 
			2200040045247455020, 15327288303752387800, 10495710256153793502, 16273505662658112490, 14721398773463347032, 5206466328696068152, 11485607232664799858, 10023668604770321902, 0, 0, 0, 0, 0, 0, 0, 0
		};

	}
}
